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

// /** importType*/
// import type {
//   DataActive,
//   SumPosition,
//   PosMaster,
// } from "@/modules/16_positionEmployee/interface/response/organizational";

export const usePositionEmp = defineStore("positionEmpStore", () => {
  const typeOrganizational = ref<string>("current");
  const statusView = ref<string>("list");

  const dataActive = ref<any>();
  const activeId = ref<string>();
  const draftId = ref<string>();
  const historyId = ref<string>();
  const treeId = ref<string>();
  const level = ref<number>();
  const isPublic = ref<boolean>(false);
  const orgPublishDate = ref<Date | null>(null);
  const sumPosition = reactive({
    total: 0,
    use: 0,
    vacant: 0,
    totalRoot: 0,
    useRoot: 0,
    vacantRoot: 0,
  });

  function getSumPosition(data: any) {
    sumPosition.total = data.totalPosition;
    sumPosition.totalRoot = data.totalRootPosition ? data.totalRootPosition : 0;

    if (typeOrganizational.value == "draft") {
      sumPosition.use = data.totalPositionNextUse;
      sumPosition.useRoot = data.totalRootPositionNextUse
        ? data.totalRootPositionNextUse
        : 0;

      sumPosition.vacant = data.totalPositionNextVacant;
      sumPosition.vacantRoot = data.totalRootPositionNextVacant
        ? data.totalRootPositionNextVacant
        : 0;
    } else {
      sumPosition.use = data.totalPositionCurrentUse;
      sumPosition.useRoot = data.totalRootPositionCurrentUse
        ? data.totalRootPositionCurrentUse
        : 0;

      sumPosition.vacant = data.totalPositionCurrentVacant;
      sumPosition.vacantRoot = data.totalRootPositionCurrentVacant
        ? data.totalRootPositionCurrentVacant
        : 0;
    }
  }

  function fetchDataActive(data: any) {
    activeId.value = data.activeId;
    draftId.value = data.draftId;
    dataActive.value = data;
    isPublic.value = data.isPublic;
    orgPublishDate.value = data.orgPublishDate;
  }

  function fetchPosMaster(data: any[]) {
    const newPosMaster = data.map((e: any) => ({
      ...e,
      positionIsSelected: e.fullNameCurrentHolder
        ? e.fullNameCurrentHolder
        : "ว่าง",
      posMasterNo:
        e.orgShortname +
        (e.posMasterNoPrefix ? e.posMasterNoPrefix : "") +
        (e.posMasterNo ? e.posMasterNo : "") +
        (e.posMasterNoSuffix ? e.posMasterNoSuffix : ""),
      positionName: e.isSit ? e.profilePosition : e.positionName,
      posTypeName: e.isSit ? e.profilePostype : e.posTypeName,
      posLevelName: e.isSit ? e.profilePoslevel : e.posLevelName,
      posExecutiveName: e.posExecutiveName,
      isSit: e.isSit,
    }));

    return newPosMaster;
  }

  function checkLevel(type: number) {
    switch (type) {
      case 0:
        return "Root";
      case 1:
        return "Child1";
      case 2:
        return "Child2";
      case 3:
        return "Child3";
      default:
        return "Child4";
    }
  }

  function convertType(type: string) {
    switch (type) {
      case "DEPARTMENT":
        return "ระดับสำนัก";
      case "OFFICE":
        return "ระดับกอง/สำนักงาน/ส่วนราชการ/โรงพยาบาล/เทียบเท่ากอง";
      case "DIVISION":
        return "ระดับส่วน/กลุ่มภารกิจ";
      case "SECTION":
        return "ระดับฝ่าย/กลุ่มงาน";
      default:
        return "-";
    }
  }

  return {
    typeOrganizational,
    statusView,

    //
    fetchDataActive,
    checkLevel,
    convertType,
    draftId,
    activeId,
    historyId,
    treeId,
    level,
    isPublic,
    orgPublishDate,
    fetchPosMaster,
    sumPosition,
    getSumPosition,
  };
});
