<template>
  <section
    v-if="activeDid"
    id="sectionUsageLimits"
    class="bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8"
    aria-labelledby="usageLimitsHeading"
  >
    <h2 id="usageLimitsHeading" class="mb-2 font-bold">Usage Limits</h2>
    <!-- show spinner if loading limits -->
    <div
      v-if="loadingLimits"
      class="text-center"
      role="status"
      aria-live="polite"
    >
      Checking&hellip;
      <font-awesome
        icon="spinner"
        class="fa-spin"
        aria-hidden="true"
      ></font-awesome>
    </div>
    <div class="mb-4 text-center">
      {{ limitsMessage }}
    </div>
    <div v-if="endorserLimits">
      <p class="text-sm">
        You have done
        <b
          >{{ endorserLimits?.doneClaimsThisWeek ?? "?" }} claim{{
            Number(endorserLimits?.doneClaimsThisWeek || 0) === 1 ? "" : "s"
          }}</b
        >
        out of <b>{{ endorserLimits?.maxClaimsPerWeek ?? "?" }}</b> for this
        week. Your claims counter resets at
        <b class="whitespace-nowrap">{{
          readableDate(endorserLimits?.nextWeekBeginDateTime)
        }}</b>
      </p>
      <p class="mt-3 text-sm">
        You have done
        <b
          >{{
            endorserLimits?.doneRegistrationsThisMonth ?? "?"
          }}
          registration{{
            Number(endorserLimits?.doneRegistrationsThisMonth || 0) === 1
              ? ""
              : "s"
          }}</b
        >
        out of
        <b>{{ endorserLimits?.maxRegistrationsPerMonth ?? "?" }}</b> for this
        this month.
        <i>(You cannot register anyone on your first day.)</i>
        Your registration counter resets at
        <b class="whitespace-nowrap">
          {{ readableDate(endorserLimits?.nextMonthBeginDateTime) }}
        </b>
      </p>
      <p class="mt-3 text-sm">
        You have uploaded
        <b
          >{{ imageLimits?.doneImagesThisWeek ?? "?" }} image{{
            Number(imageLimits?.doneImagesThisWeek || 0) === 1 ? "" : "s"
          }}</b
        >
        out of <b>{{ imageLimits?.maxImagesPerWeek ?? "?" }}</b> for this
        week. Your image counter resets at
        <b class="whitespace-nowrap">{{
          readableDate(imageLimits?.nextWeekBeginDateTime || "")
        }}</b>
      </p>
    </div>
    <button
      class="block w-full text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md mt-4"
      @click="recheckLimits"
    >
      Recheck Limits
    </button>
  </section>
</template>

<script lang="ts">
import { Component, Vue, Prop, Emit } from "vue-facing-decorator";
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';

@Component({ 
  name: "UsageLimitsSection",
  components: {
    FontAwesome: FontAwesomeIcon
  }
})
export default class UsageLimitsSection extends Vue {
  @Prop({ required: true }) loadingLimits!: boolean;
  @Prop({ required: true }) limitsMessage!: string;
  @Prop({ required: true }) activeDid!: string;
  @Prop({ required: false }) endorserLimits?: any;
  @Prop({ required: false }) imageLimits?: any;

  mounted() {
    console.log('[DEBUG] UsageLimitsSection mounted');
    console.log('[DEBUG] loadingLimits prop:', this.loadingLimits);
    console.log('[DEBUG] limitsMessage prop:', this.limitsMessage);
    console.log('[DEBUG] activeDid prop:', this.activeDid);
    console.log('[DEBUG] endorserLimits prop:', this.endorserLimits);
    console.log('[DEBUG] imageLimits prop:', this.imageLimits);
  }

  updated() {
    console.log('[DEBUG] UsageLimitsSection updated');
    console.log('[DEBUG] loadingLimits prop:', this.loadingLimits);
    console.log('[DEBUG] limitsMessage prop:', this.limitsMessage);
    console.log('[DEBUG] endorserLimits prop:', this.endorserLimits);
    console.log('[DEBUG] imageLimits prop:', this.imageLimits);
  }

  readableDate(dateString: string | undefined): string {
    if (!dateString) return "unknown";
    try {
      return new Date(dateString).toLocaleDateString();
    } catch {
      return "unknown";
    }
  }

  @Emit("recheck-limits")
  recheckLimits() {
    console.log('[DEBUG] recheckLimits called');
  }
}
</script>
