import { defineStore } from "pinia";
import { ref } from "vue";
import { useCounterMixin } from "@/stores/mixin";

const mixin = useCounterMixin();
const { date2Thai } = mixin;

export const useInsigniaDataStore = defineStore("insignia", () => {
  const isLock = ref<boolean>(false)
  const roleUser = ref<string>("")
  const requestId = ref<string>("")
  const requestStatus = ref<string>("")
  let optionsTypeOc = ref<any>([]);
  let typeOc = ref<string>("");
  const agency = ref<string>("");
  let rows = ref<any>([]);
  const listinsignia = ref<any>([]);
  const typeinsignia = ref<string>("all");
  let typeinsigniaOptions = ref<any>([{ id: "all", name: "ทั้งหมด" }]);
  const employeeClass = ref<string>("all");
  const employeeClassOps = ref<any>([{ name: "ทั้งหมด", id: "all" }, { name: "ข้าราชการ กทม.สามัญ", id: "officer" }, { name: "ลูกจ้างประจำ", id: "perm" }])

  const typeReport = ref<string>("");
  const titleReport = ref<string>("");
  const mainTab = ref<string | undefined>('pending');

  const setTypeandTitle = (type: string, title: string) => {
    typeReport.value = type;
    titleReport.value = title;
  };

  const fetchData = async (data: any) => {
    if (data !== null) {
      let datalist = await data.map((e: any) => ({
        id: e.id,
        citizenId: e.citizenId,
        profileId: e.profileId,
        name: e.fullName,
        position: e.position,
        level: e.rank,
        salary: e.salary,
        salary2: Number(e.salary).toLocaleString(),
        insigniaType: e.lastInsignia,
        insigniaSend: e.requestInsignia,
        insigniaLevel: e.level,
        dateSend: date2Thai(e.requestDate),
        requestNote: e.requestNote,
        employeeType: profileType(e.profileType),
      }));
      rows.value = await datalist
      listinsignia.value = await datalist;
      searchDataTable(typeinsignia.value, employeeClass.value)
      filtertypeInsignia();
    } else rows.value = [];
  };
  const fetchDataInsignia = async (data: any) => {
    isLock.value = data.isLock;
    requestId.value = data.requestId;
    requestStatus.value = data.requestStatus;
  }
  const fetchOption = (op: any) => {
    if (agency.value !== null) {
      typeOc.value = agency.value;
      optionsTypeOc.value = op.filter((e: any) => e.id == agency.value);
    } else {
      (optionsTypeOc.value = op), (typeOc.value = op[2].id);
    }
  };
  const filtertypeInsignia = async () => {
    typeinsignia.value = "all";
    if (listinsignia.value.length !== 0) {
      const double_name = [
        ...new Set(listinsignia.value.map((item: any) => item.insigniaSend)),
      ];
      typeinsigniaOptions.value = [{ id: "all", name: "ทั้งหมด" }];
      for (let i = 1; i <= double_name.length; i++) {
        const type = double_name[i - 1];
        const listtype = {
          id: type,
          name: type,
        };
        typeinsigniaOptions.value.push(listtype);
      }
    } else typeinsigniaOptions.value = [{ id: "all", name: "ทั้งหมด" }];
  };
  const searchDataTable = async (type: string, employeeClass: string) => {
    if (type !== 'all' && employeeClass !== 'all') {
      rows.value = listinsignia.value.filter((e: any) => e.insigniaType === type && e.employeeType === profileType(employeeClass))
    } else if (type !== 'all' && employeeClass === 'all') {
      rows.value = listinsignia.value.filter((e: any) => e.insigniaType === type)
    } else if (type === 'all' && employeeClass !== 'all') {
      rows.value = listinsignia.value.filter((e: any) => e.employeeType === profileType(employeeClass))
    }


  }
  const convertOcid = (oc: string) => {
    let ocdata = optionsTypeOc.value.find((e: any) => e.name === oc)
    if (ocdata) {
      return ocdata.id
    } else return ""
  }
  const profileType = (val: string) => {
    switch (val) {
      case "officer":
        return "ข้าราชการ กทม.สามัญ";
      case "employee":
        return "ลูกจ้างประจำ";
    }
  }

  return {
    optionsTypeOc,
    mainTab,
    typeOc,
    rows,
    typeinsigniaOptions,
    typeinsignia,
    agency,
    fetchData,
    fetchOption,
    searchDataTable,
    setTypeandTitle,
    convertOcid,
    typeReport,
    titleReport,
    employeeClass,
    employeeClassOps,
    fetchDataInsignia,
    isLock,
    requestId,
    roleUser,
    requestStatus,
  };
});
