import { defineStore } from "pinia";
import { ref } from "vue";

/** import Type*/
import type { OptionData } from "@/modules/07_insignia/interface/index/Main";

/** import Stores */
import { useCounterMixin } from "@/stores/mixin";
const mixin = useCounterMixin();
const { date2Thai } = mixin;

export const useResultDataStore = defineStore("insigniaResult", () => {
  const insignia = ref<string>("");
  const insigniaOp = ref<any[]>([{ name: "ทั้งหมด", id: "" }]);
  const insigniaOp2 = ref<any[]>([]);
  const insigniaType = ref<any>();
  const invoiceType = ref<string>("all");
  const invoiceTypeop = ref<OptionData[]>([
    { name: "ทั้งหมด", id: "all" },
    { name: "ใบกำกับที่ค้างจ่าย", id: "noDate" },
    { name: "ใบกำกับที่จ่ายแล้ว", id: "haveDate" },
  ]);
  const employeeClass = ref<string>("all");
  const employeeClassOps = ref<OptionData[]>([
    { name: "ทั้งหมด", id: "all" },
    { name: "ข้าราชการ กทม.สามัญ", id: "officer" },
    { name: "ลูกจ้างประจำ", id: "employee" },
  ]);
  const rows = ref<any>([]);
  const listInsignia = ref<any>([]);
  const type = ref<any[]>([]);

  /**
   * function เรียกประเภทเครื่องราช
   * @param data ประเภทเครื่องราช
   */
  async function fetchDatainsignia(data: any) {
    insignia.value = "";
    invoiceType.value = "all";
    insigniaOp.value = [{ name: "ทั้งหมด", id: "" }];
    insigniaOp2.value = [];
    data.forEach((e: any) => {
      insigniaOp.value.push({
        name: `${e.name} (${e.shortName})`,
        id: e.id,
        insigniaType: e.insigniaType.id,
      });
    });
    data.forEach((e: any) => {
      insigniaOp2.value.push({ name: `${e.name} (${e.shortName})`, id: e.id });
    });
    data.forEach((e: any) => {
      type.value.push({
        name: e.name,
        shortName: e.shortName,
      });
    });
  }

  /**
   * function เรียกประเภทเครื่องราช
   * @param data ประเภทเครื่องราช
   */
  async function fetchDatainsigniaType(data: any) {
    insigniaType.value = data.map((e: any) => ({ name: e.id, label: e.name }));
  }

  /**
   * function บันทึกผลการได้รับพระราชทานเครื่องราชอิสริยาภรณ์/การจ่ายใบกำกับ
   * @param data รายชื่อข้าราชการสามัญฯ
   */
  async function fetchlistinsignia(data: any) {
    rows.value = [];
    let alllist = await data.map((e: any) => ({
      id: e.id,
      citizenId: e.citizenId,
      prefix: e.prefix,
      position: e.position,
      status: status(e.status),
      dateReceive: date2Thai(e.dateReceive),
      name: e.prefix + e.fullName,
      type: `${e.requestInsignia} (${
        type.value.find((item) => item.name === e.requestInsignia)?.shortName ||
        ""
      })`,
      employeeType: profileType(e.profileType),
      profileType: e.profileType,
      date: date2Thai(e.date),
      volumeNo: e.volumeNo,
      section: e.section,
      page: e.page,
      number: e.no,
      vatnumber: e.number,
      datepay: date2Thai(e.datePayment),
      typepay: e.typePayment,
      address: e.address,
      dateReceiveInsignia: e.dateReceiveInsignia,
      dateReturnInsignia: e.dateReturnInsignia,
      docReceiveInsignia: e.docReceiveInsignia,
      docReturnInsignia: e.docReturnInsignia,
      orgReceiveInsignia: e.orgReceiveInsignia,
      orgReturnInsignia: e.orgReturnInsignia,
    }));
    rows.value = alllist;
    listInsignia.value = alllist;
    searchData(invoiceType.value, employeeClass.value);
  }

  /**
   * function ค้นหาข้อมูลในตาราง
   * @param invoice ใบกำกับ
   * @param employeeClass สถารภาพ
   */
  function searchData(invoice: string, employeeClass: string) {
    if (invoice !== "all" && employeeClass !== "all") {
      let list = listInsignia.value.filter(
        (e: any) =>
          convertDatepay(e.datepay) === invoice &&
          e.employeeType === profileType(employeeClass)
      );
      rows.value = list;
    } else if (invoice !== "all" && employeeClass === "all") {
      let list = listInsignia.value.filter(
        (e: any) => convertDatepay(e.datepay) === invoice
      );
      rows.value = list;
    } else if (invoice === "all" && employeeClass !== "all") {
      let list = listInsignia.value.filter(
        (e: any) => e.employeeType === profileType(employeeClass)
      );
      rows.value = list;
    } else if (invoice === "all" && employeeClass == "all") {
      rows.value = listInsignia.value;
    }
  }

  /**
   * function convert สถานะ
   * @param val สถานะ
   */
  function status(val: string) {
    switch (val) {
      case "PENDING":
        return "รอบันทึกข้อมูล";
      case "REJECT":
        return "ยกเลิก";
      case "DELETE":
        return "ลบ";
      case "DONE":
        return "บันทึกลง ก.พ. 7 แล้ว";
    }
  }

  /**
   * function convert สถานภาพ
   * @param val สถานภาพ
   */
  const profileType = (val: string) => {
    switch (val) {
      case "officer":
        return "ข้าราชการ กทม.สามัญ";
      case "employee":
        return "ลูกจ้างประจำ";
    }
  };

  /**
   * function convert  สถานะ การจ่าย
   * @param val สถานะ การจ่าย
   */
  const convertDatepay = (val: any) => {
    switch (val) {
      case null:
        return "noDate";
      default:
        return "haveDate";
    }
  };
  return {
    rows,
    insignia,
    insigniaOp,
    insigniaOp2,
    insigniaType,
    invoiceType,
    invoiceTypeop,
    employeeClass,
    employeeClassOps,
    fetchDatainsignia,
    fetchDatainsigniaType,
    status,
    profileType,
    fetchlistinsignia,
    searchData,
    // selectInvoice,
    // selectEmployeeClass,
  };
});
