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

export const useAllocateDataStore = defineStore("insigniaallocate", () => {
  const roundId = ref<string>("");
  const roundYear = ref<number>();
  const insigniaName = ref<string>("");
  const insignia = ref<string>("");
  const insigniaOp = ref<any[]>([{ name: "ทั้งหมด", id: "", type: "" }]);
  const insigniaType = ref<any>();
  const rows = ref<any[]>([]);
  const listInsignia = ref<any>([]);
  const mainTab = ref<string>("");
  const type = ref<any[]>([]);

  /**
   * function เรียกข้อมูลเครื่องราช
   * @param data ข้อมูลเครื่องราช
   */
  async function fetchDatainsignia(data: any) {
    insigniaOp.value = [{ name: "ทั้งหมด", id: "", type: "" }];
    data.forEach((e: any) => {
      insigniaOp.value.push({
        name: `${e.name} (${e.shortName})`,
        id: e.id,
        type: e.insigniaTypeId,
      });
    });
    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 listinsignia(data: any) {
    rows.value = [];
    let list = await data.map((e: any) => ({
      id: e.id,
      insignia: `${e.insignia} (${
        type.value.find((item) => item.name === e.insignia)?.shortName || ""
      })`,
      insigniaId: e.insigniaId,
      total: e.total,
      allocate: e.allocate,
      remain: e.remain,
      year: e.year,
    }));
    rows.value = list;
    listInsignia.value = list;
    selectInsignia(insignia.value);
  }

  /**
   * function ค้นหาข้อมูลตามประเภทเครื่องราช
   * @param type ประเภทเครื่องราช
   */
  function selectInsignia(type: string) {
    insignia.value = type;
    if (insignia.value !== "") {
      rows.value = listInsignia.value.filter(
        (e: any) => e.insigniaId === insignia.value
      );
    } else rows.value = listInsignia.value;
  }

  /**
   * function convert ประเภทตำแหน่ง
   * @param val ประเภทตำแหน่ง
   */
  function profileType(val: string) {
    switch (val) {
      case "officer":
        return "ข้าราชการ กทม.สามัญ";
      case "employee":
        return "ลูกจ้างประจำ";
    }
  }
  return {
    roundId,
    roundYear,
    rows,
    insignia,
    insigniaOp,
    insigniaType,
    fetchDatainsignia,
    fetchDatainsigniaType,
    listinsignia,
    selectInsignia,
    profileType,
    insigniaName,
    mainTab,
  };
});
