import { defineStore } from "pinia";
import { ref } from "vue";
import type { FormOrderPlacementMainData } from "@/modules/10_order/interface/request/Main";
import type { complaintLists } from "@/modules/10_order/interface/response/Order";
import type { DataOption1 } from "@/modules/10_order/interface/index/Main";

export const useOrderPlacementDataStore = defineStore("placementOrder", () => {
  interface placementOrder {
    mappingPosition: { columns: String[] };
  }

  const placementOrderData = ref<placementOrder>({
    mappingPosition: { columns: [] },
  });

  const changePlacementColumns = (system: String, val: String[]) => {
    if (system == "mappingPosition")
      placementOrderData.value.mappingPosition.columns = val;
    localStorage.setItem(
      "placementOrder",
      JSON.stringify(placementOrderData.value)
    );
  };

  if (localStorage.getItem("placementOrder") !== null) {
    placementOrderData.value = JSON.parse(
      localStorage.getItem("placementOrder") || "{}"
    );
  }

  const DataMainYearOrder = ref<object[]>([]); // ข้อมูลจำนวนปี
  const DataMainOrigOrder = ref<FormOrderPlacementMainData[]>([]); // ข้อมูลหลักดั้งเดิม
  const DataMainUpdateOrder = ref<FormOrderPlacementMainData[]>([]); // ข้อมูลเปลี่ยนแปลง
  const DataMainYearSetOrder = (val: FormOrderPlacementMainData[]) =>
    (DataMainYearOrder.value = val);

  const DataMainOrder = (val: FormOrderPlacementMainData[]) =>
    (DataMainOrigOrder.value = val);

  const DataUpdateOrder = (
    filter_1: string,
    filter_2: string,
    filterYear: number | null
  ) => {
    DataMainUpdateOrder.value = [];
    if (filter_1 === "" && filter_2 === "ทั้งหมด" && filterYear === 0) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value;
    } else if (filter_1 !== "" && filter_2 === "ทั้งหมด" && filterYear === 0) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) => item.orderTypeValue === filter_1
      );
    } else if (
      filter_1 !== "" &&
      filter_2 !== "ทั้งหมด" &&
      filterYear === null
    ) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) =>
          item.orderTypeValue === filter_1 && item.OrderStatus === filter_2
      );
    } else if (filter_1 !== "" && filter_2 === "ทั้งหมด" && filterYear !== 0) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) =>
          item.orderTypeValue === filter_1 && item.fiscalYear === filterYear
      );
    } else if (filter_1 === "" && filter_2 !== "ทั้งหมด" && filterYear === 0) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) => item.OrderStatus === filter_2
      );
    } else if (filter_1 === "" && filter_2 === "ทั้งหมด" && filterYear !== 0) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) => item.fiscalYear === filterYear
      );
    } else if (
      filter_1 === "" &&
      filter_2 !== "ทั้งหมด" &&
      filterYear !== null
    ) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) =>
          item.OrderStatus === filter_2 && item.fiscalYear === filterYear
      );
    } else if (filter_1 !== "" && filter_2 !== "ทั้งหมด" && filterYear === 0) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) =>
          item.OrderStatus === filter_2 && item.orderTypeValue === filter_1
      );
    } else if (
      filter_1 !== "" &&
      filter_2 !== "ทั้งหมด" &&
      filterYear !== null
    ) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value.filter(
        (item) =>
          item.orderTypeValue === filter_1 &&
          item.OrderStatus === filter_2 &&
          item.fiscalYear === filterYear
      );
    } else if (filter_1 == "" && filter_2 == "ทั้งหมด" && filterYear !== null) {
      DataMainUpdateOrder.value = DataMainOrigOrder.value;
    }
  };

  const nameOrderFilter = (selectOrder: any) => {
    switch (selectOrder) {
      case "C-PM-01":
        return "บรรจุและแต่งตั้งผู้สอบแข่งขันได้";
      case "C-PM-02":
        return "บรรจุและแต่งตั้งผู้ได้รับคัดเลือก";
      case "C-PM-03":
        return "แต่งตั้งข้าราชการ";
      case "C-PM-04":
        return "ย้ายข้าราชการ";
      case "C-PM-05":
        return "แต่งตั้งข้าราชการ";
      case "C-PM-06":
        return "แต่งตั้งข้าราชการ";
      case "C-PM-07":
        return "ย้ายข้าราชการ";
      case "C-PM-08":
        return "บรรจุและแต่งตั้งข้าราชการกรุงเทพมหานครสามัญกลับเข้ารับราชการ";
      case "C-PM-09":
        return "บรรจุและแต่งตั้งผู้ออกไปรับราชการทหารกลับเข้ารับราชการ";
      case "C-PM-10":
        return "แต่งตั้งคณะกรรมการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ";
      case "C-PM-11":
        return "ให้ข้าราชการกรุงเทพมหานครสามัญซึ่งมีผลการทดลองปฏิบัติหน้าที่ราชการไม่ต่ำกว่ามาตรฐานที่กำหนดรับราชการต่อไป";
      case "C-PM-12":
        return "ให้ข้าราชการกรุงเทพมหานครสามัญออกจากราชการเพราะผลการทดลองปฏิบัติหน้าที่ราชการต่ำกว่ามาตรฐานที่กำหนด";
      case "C-PM-13":
        return "ให้โอนข้าราชการกรุงเทพมหานครสามัญ";
      case "C-PM-14":
        return "รับโอนข้าราชการกรุงเทพมหานครสามัญ";
      case "C-PM-15":
        return "ให้ข้าราชการช่วยราชการ";
      case "C-PM-16":
        return "ให้ข้าราชการกลับไปปฎิบัติงานทางต้นสังกัดเดิม";
      case "C-PM-17":
        return "อนุญาตให้ข้าราชการลาออกจากราชการ";
      case "C-PM-18":
        return "ลงโทษให้ออกจากราชการ";
      case "C-PM-19":
        return "ลงโทษปลดออกจากราชการ";
      case "C-PM-20":
        return "ลงโทษไล่ออกจากราชการ";
      case "C-PM-21":
        return "จ้างและแต่งตั้งลูกจ้างประจำ";
      case "C-PM-22":
        return "แต่งตั้งลูกจ้างประจำ";
      case "C-PM-23":
        return "อนุญาตให้ลูกจ้างประจำลาออกจากราชการ";
      case "C-PM-24":
        return "แต่งตั้งลูกจ้างประจำ";
      case "C-PM-25":
        return "พักจากราชการ";
      case "C-PM-26":
        return "ให้ออกจากราชการไว้ก่อน";
      case "C-PM-27":
        return "ลงโทษภาคทัณฑ์ข้าราชการ";
      case "C-PM-28":
        return "ลงโทษตัดเงินเดือนข้าราชการ";
      case "C-PM-29":
        return "ลงโทษลดขั้นเงินเดือนข้าราชการ";
      case "C-PM-30":
        return "งดโทษ/ลดโทษ/เพิ่มโทษ/ยกโทษ";
      case "C-PM-31":
        return "งดโทษข้าราชการ";
      case "C-PM-32":
        return "ยุติเรื่องข้าราชการ";
      default:
        return "";
    }
  };

  const complaintLists = ref<complaintLists[]>([]);
  const complaintOption = ref<DataOption1[]>([]);

  return {
    placementOrderData,
    changePlacementColumns,
    DataMainYearOrder,
    DataMainOrigOrder,
    DataMainUpdateOrder,
    DataUpdateOrder,
    DataMainYearSetOrder,
    DataMainOrder,
    nameOrderFilter,
    complaintLists,
    complaintOption,
  };
});
