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

import type { DataOption } from "@/modules/11_discipline/interface/index/Main";
import type { FaultTypeOption } from "@/modules/11_discipline/interface/request/result";
import type { ArrayPersonAdd } from "@/modules/11_discipline/interface/response/investigate";

export const useDisciplineMainStore = defineStore("disciplineMainStore", () => {
  const formComplaint = reactive<{
    dateReceived: [Date, Date] | null;
    respondentType: string;
    offenseDetails: string;
    levelConsideration: string;
    dateConsideration: [Date, Date] | null;
  }>({
    dateReceived: null, // วันที่รับเรื่องเริ่มต้น[0] - สิ้นสุด[1]
    respondentType: "", // ผู้ถูกร้องเรียน
    offenseDetails: "", // ลักษณะความผิด
    levelConsideration: "", // ระดับการพิจารณา
    dateConsideration: null, // วันที่เริ่มต้น[0] - สิ้นสุดการพิจารณา[1]
  });

  const formInvestigateFacts = reactive<{
    respondentType: string;
    offenseDetails: string;
    investigationDetail: string;
    investigationDate: [Date, Date] | null;
    dateReceived: [Date, Date] | null;
    investigationStatusResult: string;
  }>({
    respondentType: "", // ผู้ถูกสืบสวน
    offenseDetails: "", // ลักษณะความผิด
    investigationDetail: "", // ลักษณะการสืบสวน
    investigationDate: null, // วันที่สืบสวนเริ่มต้น[0] - สิ้นสุด[1]
    dateReceived: null, // วันที่รับเรื่องเริ่มต้น[0] - สิ้นสุด[1]
    investigationStatusResult: "", // ผลการสืบสวน
  });

  const formInvestigateDisciplinary = reactive<{
    respondentType: string;
    offenseDetails: string;
    disciplinaryFaultLevel: string;
    disciplinaryCaseFault: string;
    disciplinaryDate: [Date, Date] | null;
    dateReceived: [Date, Date] | null;
  }>({
    respondentType: "", // ผู้ถูกสอบสวน
    offenseDetails: "", // ลักษณะความผิด
    disciplinaryFaultLevel: "", // ระดับโทษความผิด
    disciplinaryCaseFault: "", // กรณีความผิด
    disciplinaryDate: null, // วันที่สอบสวนเริ่มต้น[0]-สิ้นสุด[1]
    dateReceived: null, // วันที่รับเรื่องเริ่มต้น[0]-สิ้นสุด[1]
  });

  const formResult = reactive<{
    respondentType: string;
    offenseDetails: string;
    disciplinaryFaultLevel: string;
    disciplinaryCaseFault: string;
    disciplinaryDate: [Date, Date] | null;
    resultDisciplineType: string;
    resultTitleType: string;
    resultOc: string;
    resultYear: number | null;
  }>({
    respondentType: "", // ผู้ถูกสอบสวน
    offenseDetails: "", // ลักษณะความผิด
    disciplinaryFaultLevel: "", // ระดับโทษความผิด
    disciplinaryCaseFault: "", // กรณีความผิด
    disciplinaryDate: null, // วันที่สอบสวนเริ่มต้น[0]-สิ้นสุด[1]
    resultDisciplineType: "", // ประเภทวินัย input
    resultTitleType: "", // ประเภทของเรื่อง
    resultOc: "", // หน่วยงาน/ส่วนราชการ
    resultYear: null, // ปีงบประมาณ
  });

  /** option ผู้ถูกสอบสวน*/
  const complainantoptionsMain = ref<DataOption[]>([
    { id: "PERSON", name: "บุคคล" },
    { id: "ORGANIZATION", name: "หน่วยงาน" },
    { id: "BANGKOK", name: "กรุงเทพมหานคร" },
  ]);

  /** option ลักษณะความผิด */
  const offenseDetailstOptions = ref<DataOption[]>([
    { id: "NOT_SPECIFIED", name: "ยังไม่ระบุ" },
    { id: "NOT_DEADLY", name: "ไม่ร้ายแรง" },
    { id: "DEADLY", name: "ร้ายแรง" },
  ]);

  const statusResultOptions = ref<DataOption[]>([
    { id: "NOT_SPECIFIED", name: "ยังไม่ระบุ" },
    { id: "HAVE_CAUSE", name: "มีมูล" },
    { id: "NO_CAUSE", name: "ไม่มีมูล" },
  ]);

  const causeTextOptions = ref<DataOption[]>([
    { id: "ร้ายแรง", name: "ร้ายแรง" },
    { id: "ไม่ร้ายแรง", name: "ไม่ร้ายแรง" },
  ]);
  const rowsAdd = ref<ArrayPersonAdd[]>([]);
  const rowsAddCheck = ref<ArrayPersonAdd[]>([]);
  const rowsSend = ref<ArrayPersonAdd[]>([]);
  const rowsCheck = ref<ArrayPersonAdd[]>([]);
  /** หัวตารางผู้ถูกร้องเรียน */
  const columnsRespondent = ref<QTableProps["columns"]>([
    {
      name: "no",
      align: "center",
      label: "ลำดับ",
      sortable: false,
      field: "no",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "profileType",
      align: "left",
      label: "ประเภทตำแหน่ง",
      sortable: true,
      field: "profileType",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
      format(val, row) {
        return `${convertType(row.profileType)}`;
      },
    },
    {
      name: "idcard",
      align: "left",
      label: "เลขประจำตัวประชาชน",
      sortable: true,
      field: "idcard",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "name",
      align: "left",
      label: "ชื่อ-นามสกุล",
      sortable: true,
      field: "name",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "posNo",
      align: "left",
      label: "เลขที่ตำแหน่ง",
      sortable: true,
      field: "posNo",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "position",
      align: "left",
      label: "ตำแหน่ง",
      sortable: true,
      field: "position",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "posLevelName",
      align: "left",
      label: "ระดับ",
      sortable: true,
      field: "posLevelName",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "salary",
      align: "left",
      label: "เงินเดือน",
      sortable: true,
      field: "salary",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
      format(val, row) {
        return val ? val.toLocaleString() : "-";
      },
    },
    {
      name: "organization",
      align: "left",
      label: "หน่วยงาน",
      sortable: true,
      field: "organization",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "isSend",
      align: "left",
      label: "ยุติเรื่อง",
      sortable: true,
      field: "isSend",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "remarkReject",
      align: "left",
      label: "หมายเหตุการยุติเรื่อง",
      sortable: true,
      field: "remarkReject",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "disciplineRejectDoc",
      align: "left",
      label: "เอกสารการยุติเรื่อง",
      sortable: true,
      field: "disciplineRejectDoc",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
  ]);

  /** หัวข้อที่เเสดงในตารางผู้ถูกร้องเรียน */
  const visibleColumnsRespondent = ref<string[]>([
    "no",
    "profileType",
    "idcard",
    "name",
    "posNo",
    "position",
    "posLevelName",
    "salary",
    "organization",
    "isSend",
    "remarkReject",
    "disciplineRejectDoc",
  ]);

  /** หัวตารางกรรมการ */
  // {
  //   name: "info",
  //   align: "left",
  //   label: "",
  //   sortable: false,
  //   field: "info",
  //   headerStyle: "font-size: 14px",
  //   style: "font-size: 14px",
  // },
  const columnsDirector = ref<QTableProps["columns"]>([
    {
      name: "no",
      align: "left",
      label: "ลำดับ",
      sortable: false,
      field: "no",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "profileType",
      align: "left",
      label: "ประเภทตำแหน่ง",
      sortable: true,
      field: "profileType",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
      format(val, row) {
        return `${convertType(row.profileType)}`;
      },
    },
    {
      name: "idcard",
      align: "left",
      label: "เลขประจำตัวประชาชน",
      sortable: true,
      field: "idcard",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "name",
      align: "left",
      label: "ชื่อ-นามสกุล",
      sortable: true,
      field: "name",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "posNo",
      align: "left",
      label: "เลขที่ตำแหน่ง",
      sortable: true,
      field: "posNo",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "position",
      align: "left",
      label: "ตำแหน่ง",
      sortable: true,
      field: "position",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "posLevelName",
      align: "left",
      label: "ระดับ",
      sortable: true,
      field: "posLevelName",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
      format(val, row) {
        return row.positionLevel
          ? row.positionLevel
          : row.posLevelName
          ? row.posLevelName
          : "-";
      },
    },
    {
      name: "salary",
      align: "left",
      label: "เงินเดือน",
      sortable: true,
      field: "salary",
      format(val, row) {
        return val.toLocaleString();
      },
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
    {
      name: "organization",
      align: "left",
      label: "หน่วยงาน",
      sortable: true,
      field: "organization",
      headerStyle: "font-size: 14px",
      style: "font-size: 14px",
    },
  ]);

  /** หัวข้อที่เเสดงในตารางกรรมการ */
  // "info",
  const visibleColumnsDirector = ref<string[]>([
    "no",
    "profileType",
    "idcard",
    "name",
    "posNo",
    "position",
    "posLevelName",
    "salary",
    "organization",
  ]);

  const checkValueFaultT = ref<FaultTypeOption[]>([
    {
      id: 1,
      subId: 0,
      title:
        "มาตรา ๘๑ ข้าราชการพลเรือนสามัญต้องสนับสนุนการปกครองระบอบประชาธิปไตยอันมีพระมหากษัตริย์ทรงเป็นประมุขด้วยความบริสุทธิ์ใจ",
      value: false,
      status_select: 1,
    },
    {
      id: 2,
      subId: 0,
      title:
        "มาตรา ๘๒ ข้าราชการพลเรือนสามัญต้องกระทำการอันเป็นข้อปฏิบัติดังต่อไปนี้",
      value: false,
      status_select: 0,
    },
    {
      id: 3,
      subId: 2,
      title:
        "(๑) ต้องปฏิบัติหน้าที่ราชการด้วยความซื่อสัตย์ สุจริต และเที่ยงธรรม",
      value: false,
      status_select: 1,
    },
    {
      id: 4,
      subId: 2,
      title:
        "(๒) ต้องปฏิบัติหน้าที่ราชการให้เป็นไปตามกฎหมาย กฎ ระเบียบของทางราชการ มติของคณะรัฐมนตรี นโยบายของรัฐบาล และปฏิบัติตามระเบียบแบบแผนของทางราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 5,
      subId: 2,
      title:
        "(๓) ต้องปฏิบัติหน้าที่ราชการให้เกิดผลดีหรือความก้าวหน้าแก่ราชการด้วยความตั้งใจอุตสาหะ เอาใจใส่ และรักษาประโยชน์ของทางราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 6,
      subId: 2,
      title:
        "(๔) ต้องปฏิบัติตามคำสั่งของผู้บังคับบัญชาซึ่งสั่งในหน้าที่ราชการ โดยชอบด้วยกฎหมายและระเบียบของทางราชการ โดยไม่ขัดขืนหรือหลีกเลี่ยง แต่ถ้าเห็นว่าการปฏิบัติตามคำสั่งนั้นจะทำให้เสียหายแก่ราชการ หรือจะเป็นการไม่รักษาประโยชน์ของทางราชการ จะต้องเสนอความเห็นเป็นหนังสือทันทีเพื่อให้ผู้บังคับบัญชาทบทวนคำสั่งนั้น และเมื่อได้เสนอความเห็นแล้ว ถ้าผู้บังคับบัญชายืนยันให้ปฏิบัติตามคำสั่งเดิม ผู้อยู่ใต้บังคับบัญชาต้องปฏิบัติตาม",
      value: false,
      status_select: 1,
    },
    {
      id: 7,
      subId: 2,
      title:
        "(๕) ต้องอุทิศเวลาของตนให้แก่ราชการ จะละทิ้งหรือทอดทิ้งหน้าที่ราชการมิได้",
      value: false,
      status_select: 1,
    },
    {
      id: 8,
      subId: 2,
      title: "(๖) ต้องรักษาความลับของทางราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 9,
      subId: 2,
      title:
        "(๗) ต้องสุภาพเรียบร้อย รักษาความสามัคคี และต้องช่วยเหลือกันในการปฏิบัติราชการระหว่างข้าราชการด้วยกันและผู้ร่วมปฏิบัติราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 10,
      subId: 2,
      title:
        "(๘) ต้องต้อนรับ ให้ความสะดวก ให้ความเป็นธรรม และให้การสงเคราะห์แก่ประชาชนผู้ติดต่อราชการเกี่ยวกับหน้าที่ของตน",
      value: false,
      status_select: 1,
    },
    {
      id: 11,
      subId: 2,
      title:
        "(๙) ต้องวางตนเป็นกลางทางการเมืองในการปฏิบัติหน้าที่ราชการ และในการปฏิบัติการอื่นที่เกี่ยวข้องกับประชาชน ทั้งจะต้องปฏิบัติตามระเบียบของทางราชการว่าด้วยมารยาททางการเมืองของข้าราชการด้วย",
      value: false,
      status_select: 1,
    },
    {
      id: 12,
      subId: 2,
      title:
        "(๑๐) ต้องรักษาชื่อเสียงของตน และรักษาเกียรติศักดิ์ของตำแหน่งหน้าที่ราชการของตนมิให้เสื่อมเสีย",
      value: false,
      status_select: 1,
    },
    {
      id: 13,
      subId: 2,
      title: "(๑๑) กระทำการอื่นใดตามที่กำหนดในกฎ ก.พ.",
      value: false,
      status_select: 1,
    },
    {
      id: 14,
      subId: 0,
      title:
        "มาตรา ๘๓ ข้าราชการพลเรือนสามัญต้องไม่กระทำการใดอันเป็นข้อห้ามดังต่อไปนี้",
      value: false,
      status_select: 0,
    },
    {
      id: 15,
      subId: 14,
      title:
        "(๑) ต้องไม่รายงานเท็จต่อผู้บังคับบัญชา การรายงานโดยปกปิดข้อความซึ่งควรต้องแจ้ง ถือว่าเป็นการรายงานเท็จด้วย",
      value: false,
      status_select: 1,
    },
    {
      id: 16,
      subId: 14,
      title:
        "(๒) ต้องไม่ปฏิบัติราชการอันเป็นการกระทำการข้ามผู้บังคับบัญชาเหนือตน เว้นแต่ผู้บังคับบัญชาเหนือตนขึ้นไปเป็นผู้สั่งให้กระทำ หรือได้รับอนุญาตเป็นพิเศษชั่วคราว",
      value: false,
      status_select: 1,
    },
    {
      id: 17,
      subId: 14,
      title:
        "(๓) ต้องไม่อาศัยหรือยอมให้ผู้อื่นอาศัยตำแหน่งหน้าที่ราชการของตนหาประโยชน์ให้แก่ตนเองหรือผู้อื่น",
      value: false,
      status_select: 1,
    },
    {
      id: 18,
      subId: 14,
      title: "(๔) ต้องไม่ประมาทเลินเล่อในหน้าที่ราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 19,
      subId: 14,
      title:
        "(๕) ต้องไม่กระทำการหรือยอมให้ผู้อื่นกระทำการหาผลประโยชน์อันอาจทำให้เสียความเที่ยงธรรม หรือเสื่อมเสียเกียรติศักดิ์ของตำแหน่งหน้าที่ราชการของตน",
      value: false,
      status_select: 1,
    },
    {
      id: 20,
      subId: 14,
      title:
        "(๖) ต้องไม่เป็นกรรมการ ผู้จัดการ หรือดำรงตำแหน่งอื่นใดที่มีลักษณะงานคล้ายคลึงกันนั้นในห้างหุ้นส่วนหรือบริษัท",
      value: false,
      status_select: 1,
    },
    {
      id: 21,
      subId: 14,
      title:
        "(๗) ต้องไม่กระทำการอย่างใดที่เป็นการกลั่นแกล้ง กดขี่ หรือข่มเหงกันในการปฏิบัติราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 22,
      subId: 14,
      title:
        "(๘) ต้องไม่กระทำการอันเป็นการล่วงละเมิดหรือคุกคามทางเพศตามที่กำหนดในกฎ ก.พ.",
      value: false,
      status_select: 1,
    },
    {
      id: 23,
      subId: 14,
      title:
        "(๙) ต้องไม่ดูหมิ่น เหยียดหยาม กดขี่ หรือข่มเหงประชาชนผู้ติดต่อราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 24,
      subId: 14,
      title: "(๑๐) ไม่กระทำการอื่นใดตามที่กำหนดในกฎ ก.พ.",
      value: false,
      status_select: 1,
    },
    {
      id: 25,
      subId: 0,
      title:
        "มาตรา ๘๔ ข้าราชการพลเรือนสามัญผู้ใดไม่ปฏิบัติตามข้อปฏิบัติตามมาตรา ๘๑ และมาตรา ๘๒ หรือฝ่าฝืนข้อห้ามตามมาตรา ๘๓ ผู้นั้นเป็นผู้กระทำผิดวินัย",
      value: false,
      status_select: 1,
    },
    {
      id: 26,
      subId: 0,
      title:
        "มาตรา ๘๕ การกระทำผิดวินัยในลักษณะดังต่อไปนี้ เป็นความผิดวินัยอย่างร้ายแรง",
      value: false,
      status_select: 0,
    },
    {
      id: 27,
      subId: 26,
      title:
        "(๑) ปฏิบัติหรือละเว้นการปฏิบัติหน้าที่ราชการโดยมิชอบเพื่อให้เกิดความเสียหายอย่างร้ายแรงแก่ผู้หนึ่งผู้ใด หรือปฏิบัติหรือละเว้นการปฏิบัติหน้าที่ราชการโดยทุจริต",
      value: false,
      status_select: 1,
    },
    {
      id: 28,
      subId: 26,
      title:
        "(๒) ละทิ้งหรือทอดทิ้งหน้าที่ราชการโดยไม่มีเหตุผลอันสมควรเป็นเหตุให้เสียหายแก่ราชการอย่างร้ายแรง",
      value: false,
      status_select: 1,
    },
    {
      id: 29,
      subId: 26,
      title:
        "(๓) ละทิ้งหน้าที่ราชการติดต่อกันในคราวเดียวกันเป็นเวลาเกินสิบห้าวันโดยไม่มีเหตุอันสมควร หรือโดยมีพฤติการณ์อันแสดงถึงความจงใจไม่ปฏิบัติตามระเบียบของทางราชการ",
      value: false,
      status_select: 1,
    },
    {
      id: 30,
      subId: 26,
      title: "(๔) กระทำการอันได้ชื่อว่าเป็นผู้ประพฤติชั่วอย่างร้ายแรง",
      value: false,
      status_select: 1,
    },
    {
      id: 31,
      subId: 26,
      title:
        "(๕) ดูหมิ่น เหยียดหยาม กดขี่ ข่มเหง หรือทำร้ายประชาชนผู้ติดต่อราชการอย่างร้ายแรง",
      value: false,
      status_select: 1,
    },
    {
      id: 32,
      subId: 26,
      title:
        "(๖) กระทำความผิดอาญาจนได้รับโทษจำคุกหรือโทษที่หนักกว่าโทษจำคุก โดยคำพิพากษาถึงที่สุดให้จำคุกหรือให้รับโทษที่หนักกว่าโทษจำคุก เว้นแต่เป็นโทษสำหรับความผิดที่ได้กระทำโดยประมาทหรือความผิดลหุโทษ",
      value: false,
      status_select: 1,
    },
    {
      id: 33,
      subId: 26,
      title:
        "(๗) ละเว้นการกระทำหรือกระทำการใด ๆ อันเป็นการไม่ปฏิบัติตามมาตรา ๘๒ หรือฝ่าฝืนข้อห้ามตามมาตรา ๘๓ อันเป็นเหตุให้เสียหายแก่ราชการอย่างร้ายแรง",
      value: false,
      status_select: 1,
    },
    {
      id: 34,
      subId: 26,
      title:
        "(๘) ละเว้นการกระทำหรือกระทำการใด ๆ อันเป็นการไม่ปฏิบัติตามมาตรา ๘๐ วรรคสอง และมาตรา ๘๒ (๑๑) หรือฝ่าฝืนข้อห้ามตามมาตรา ๘๓ (๑๐) ที่มีกฎ ก.พ. กำหนดให้เป็นความผิดวินัยอย่างร้ายแรง",
      value: false,
      status_select: 1,
    },
  ]);

  /**
   * แปลง option ที่รับมาเป็น ไทย
   * @param val ค่าที่ได้จาก API
   * @returns ส่ง name ที่ id ตรงกันออกไป
   */
  function convertComplaintType(val: string) {
    const result = complainantoptionsMain.value.find(
      (x: any) => x.id == val
    )?.name;
    return result ? result : "-";
  }

  /**
   * แปลง status เป็น text
   * @param val status
   * @returns text
   */
  function convertFault(val: string) {
    switch (val) {
      case "NOT_SPECIFIED":
        return "ความผิดวินัยยังไม่ระบุ";
      case "NOT_DEADLY":
        return "ความผิดวินัยไม่ร้ายแรง";
      case "DEADLY":
        return "ความผิดวินัยร้ายแรง";
      default:
        return "-";
    }
  }

  /**
   * แปลง status เป็น text
   * @param val status
   * @returns text
   */
  function convertStatus(val: string) {
    switch (val) {
      case "NEW":
        return "กำลังสอบสวน";
      case "STOP":
        return "ยุติเรื่อง";
      case "SEND_DISCIPLINARY":
        return "ส่งไปสอบสวน";
      case "DONE":
        return "ส่งไปสรุปผลการพิจารณาความผิดทางวินัย";
    }
  }

  /**
   * แปลง status เป็น text #เรื่องร้องเรียน channal
   * @param val status
   * @returns text
   */
  function pathComplaintsChannal(val: string) {
    switch (val) {
      case "disciplineChannel":
        return "main";
      case "disciplineComplaintsAdd":
        return "create-complain";
      case "disciplineComplaintsEdit":
      case "disciplineComplaintsDetail":
        return "complain";
      case "disciplineInvestigatefactsEdit":
      case "disciplineInvestigatefactsDetail":
        return "inves";
      case "disciplineDisciplinaryEdit":
      case "disciplineDisciplinaryDetail":
        return "discip";
      case "disciplineEditResult":
      case "disciplineResultDetail":
        return "result";
    }
  }
  /**
   * แปลง status เป็น text #เรื่องร้องเรียน
   * @param val status
   * @returns text
   */
  function pathComplaints(val: string) {
    switch (val) {
      case "disciplineComplaintsEdit":
      case "disciplineComplaintsDetail":
        return "main";
      case "disciplineInvestigatefactsEdit":
      case "disciplineInvestigatefactsDetail":
        return "inves";
      case "disciplineDisciplinaryEdit":
      case "disciplineDisciplinaryDetail":
        return "discip";
      case "disciplineEditResult":
      case "disciplineResultDetail":
        return "result";
    }
  }

  /**
   * แปลง status เป็น text #สืบสวนข้อเท็จจริง
   * @param val status
   * @returns text
   */
  function pathInves(val: string) {
    switch (val) {
      case "disciplineInvestigatefactsEdit":
      case "disciplineInvestigatefactsDetail":
        return "main";
      case "disciplineDisciplinaryEdit":
      case "disciplineDisciplinaryDetail":
        return "discip";
      case "disciplineEditResult":
      case "disciplineResultDetail":
        return "result";
    }
  }

  /**
   * แปลง status เป็น text #กรรมการ
   * @param val status
   * @returns text
   */
  function pathDirector(val: string) {
    switch (val) {
      case "disciplineInvestigatefactsEdit":
      case "disciplineInvestigatefactsDetail":
        return "inves";
      case "disciplineDisciplinaryEdit":
      case "disciplineDisciplinaryDetail":
        return "discip";
      case "disciplineDirector":
        return "main";
    }
  }

  /**
   * แปลง status เป็น text #สอบสวนความผิดทางวินัย
   * @param val status
   * @returns text
   */
  function pathDiscip(val: string) {
    switch (val) {
      case "disciplineDisciplinaryEdit":
      case "disciplineDisciplinaryDetail":
        return "main";
      case "disciplineEditResult":
      case "disciplineResultDetail":
        return "result";
    }
  }

  /**
   * แปลง option ที่รับมาเป็น ไทย
   * @param val ค่าที่ได้จาก API
   * @returns ส่ง name ที่ id ตรงกันออกไป
   */
  function convertOffenseDetailst(val: string) {
    return (
      offenseDetailstOptions.value.find((x: any) => x.id == val)?.name ?? "-"
    );
  }

  /**
   * แปลง option ที่รับมาเป็น ไทย
   * @param val ค่าที่ได้จาก API
   * @returns ส่ง name ที่ id ตรงกันออกไป
   */
  function convertStatusResult(val: string) {
    const result = statusResultOptions.value.find(
      (x: any) => x.id == val
    )?.name;
    return result ? result : "-";
  }

  /**
   * จัดเก็บข้อมูลไว้ เพื่อใช้ใน POPUP
   * @param data ข้อมูลรายการบุคคล
   */
  async function fetchData(data: ArrayPersonAdd[], type?: string) {
    const dataList: any = data.map((item: any) => ({
      profileType: item.profileType
        ? item.profileType
        : type == "officer"
        ? "OFFICER"
        : "EMPLOYEE",
      id: item.id,
      idcard: item.idcard,
      name: item.name,
      prefix: item.prefix,
      firstName: item.firstName,
      lastName: item.lastName,
      position: item.position,
      positionLevel: item.positionLevel,
      salary: item.salary === null ? "" : item.salary,
      personId: item.personId,
      posNo: item.posNo === null ? "-" : item.posNo,
      organization: item.organization,
      root: item.root,
      rootId: item.rootId,
      rootShortName: item.rootShortName,
      child1: item.child1,
      child1Id: item.child1Id,
      child1ShortName: item.child1ShortName,
      child2: item.child2,
      child2Id: item.child2Id,
      child2ShortName: item.child2ShortName,
      child3: item.child3,
      child3Id: item.child3Id,
      child3ShortName: item.child3ShortName,
      child4: item.child4,
      child4Id: item.child4Id,
      child4ShortName: item.child4ShortName,
      posMasterNo: item.posMasterNo,
      posTypeId: item.posTypeId,
      posTypeName: item.posTypeName,
      posLevelId: item.posLevelId,
      posLevelName: item.posLevelName,

      rootDnaId: item.rootDnaId,
      child1DnaId: item.child1DnaId,
      child2DnaId: item.child2DnaId,
      child3DnaId: item.child3DnaId,
      child4DnaId: item.child4DnaId,
    }));

    const newItems = dataList.filter(
      (newItem: any) =>
        !rowsAdd.value.some(
          (existingItem: any) => existingItem.personId === newItem.personId
        )
    );

    // เพิ่มข้อมูลใหม่เข้า rowsAdd
    rowsAdd.value = [...rowsAdd.value, ...newItems];
  }

  /**
   * จัดเก็บข้อมูลไว้ เพื่อใช้ใน POPUP
   * @param data ข้อมูลรายการบุคคล
   */
  async function fetchDataRowsSend(data: ArrayPersonAdd[]) {
    const dataList: any = data.map((item: any) => ({
      id: item.id,
      idcard: item.idcard,
      name: item.name,
      profileType: item.profileType,
      prefix: item.prefix,
      firstName: item.firstName,
      lastName: item.lastName,
      position: item.position,
      positionLevel: item.positionLevel,
      salary: item.salary === null ? "" : item.salary,
      personId: item.personId,
      posNo: item.posNo === null ? "-" : item.posNo,
      organization: item.organization,
      root: item.root,
      rootId: item.rootId,
      rootShortName: item.rootShortName,
      child1: item.child1,
      child1Id: item.child1Id,
      child1ShortName: item.child1ShortName,
      child2: item.child2,
      child2Id: item.child2Id,
      child2ShortName: item.child2ShortName,
      child3: item.child3,
      child3Id: item.child3Id,
      child3ShortName: item.child3ShortName,
      child4: item.child4,
      child4Id: item.child4Id,
      child4ShortName: item.child4ShortName,
      posMasterNo: item.posMasterNo,
      posTypeId: item.posTypeId,
      posTypeName: item.posTypeName,
      posLevelId: item.posLevelId,
      posLevelName: item.posLevelName,
      isSend: item.isSend,
    }));
    rowsSend.value = dataList;
  }

  function convertType(val: string) {
    const data = val?.toLocaleUpperCase();
    switch (data) {
      case "OFFICER":
        return "ข้าราชการ กทม. สามัญ";
      case "EMPLOYEE":
        return "ลูกจ้างประจำ กทม.";
    }
  }
  return {
    complainantoptionsMain,
    convertFault,
    convertStatus,
    columnsRespondent,
    visibleColumnsRespondent,
    offenseDetailstOptions,
    convertOffenseDetailst,
    convertComplaintType,

    columnsDirector,
    visibleColumnsDirector,
    rowsAdd,
    rowsAddCheck,
    fetchData,
    statusResultOptions,
    convertStatusResult,
    rowsCheck,
    causeTextOptions,
    rowsSend,
    fetchDataRowsSend,
    pathComplaints,
    pathInves,
    pathDiscip,
    pathComplaintsChannal,
    pathDirector,
    convertType,
    checkValueFaultT,
    formComplaint,
    formInvestigateFacts,
    formInvestigateDisciplinary,
    formResult,
  };
});
