<script setup lang="ts">
import { ref, watch, computed } from "vue";
import { useQuasar } from "quasar";

import { useCounterMixin } from "@/stores/mixin";
import { useTransferDataStore } from "@/modules/05_placement/store";

import type { QTableProps } from "quasar";
import type { ResponseData } from "@/modules/05_placement/interface/response/Transfer";

import DialogHeader from "@/components/DialogHeader.vue";
import DialogCreateCommand from "@/modules/18_command/components/DialogCreateCommand.vue";

const $q = useQuasar();
const mixin = useCounterMixin();
const { statusText } = useTransferDataStore();
const { dialogConfirm, date2Thai, onSearchDataTable } = mixin;

const modal = defineModel<boolean>("modal", { required: true });
/** props */
const props = defineProps({
  closeModal: Function,
  fetchData: Function,
});

const rows = defineModel<any[]>("rows", { required: true });
const rowsData = defineModel<any[]>("rowsData", { required: true });
const modalCommand = ref<boolean>(false); //เปิด-ปิด modal สร้างคำสั่ง
//Table
const selected = ref<ResponseData[]>([]); //รายชื่อที่เลือก
const dataMapToSend = computed(() => {
  return selected.value.map((i: any) => ({
    id: i.id,
    profileId: i.profileId,
    prefix: i.prefix,
    firstName: i.firstName,
    lastName: i.lastName,
    citizenId: i.citizenId,
    remarkVertical: i.reason,
    position: i.positionOld,
    posType: i.positionTypeOld,
    posLevel: i.positionLevelOld,
  }));
});

const filter = ref<string>(""); //คำค้นหา
const visibleColumns2 = ref<string[]>([
  "no",
  "fullname",
  "posType",
  "positionNumberOld",
  "organizationPositionOld",
  "organization",
  "status",
  "createdAt",
]);
const columns2 = ref<QTableProps["columns"]>([
  {
    name: "no",
    align: "left",
    label: "ลำดับ",
    sortable: false,
    field: "no",
    headerStyle: "font-size: 14px",
    style: "font-size: 14px",
  },
  {
    name: "fullname",
    align: "left",
    label: "ชื่อ-นามสกุล",
    sortable: true,
    field: "fullname",
    headerStyle: "font-size: 14px",
    style: "font-size: 14px",
    format(val, row) {
      return `${row.prefix}${row.firstName} ${row.lastName}`;
    },
  },
  {
    name: "positionNumberOld",
    align: "left",
    label: "เลขที่ตำแหน่งเดิม",
    sortable: true,
    field: "positionNumberOld",
    headerStyle: "font-size: 14px",
    style: "font-size: 14px",
  },
  {
    name: "posType",
    align: "left",
    label: "ตำแหน่งประเภท",
    sortable: true,
    field: "posType",
    headerStyle: "font-size: 14px",
    style: "font-size: 14px",
    format(val, row) {
      return row.positionTypeOld + " (" + row.positionLevelOld + ")";
    },
  },

  {
    name: "organizationPositionOld",
    align: "left",
    label: "ตำแหน่ง/สังกัดเดิม",
    sortable: true,
    field: "organizationPositionOld",
    format(val, row) {
      return row.organizationPositionOld
        ? `${row.organizationPositionOld.replace(/\n/g, " ")}`
        : "-";
    },
    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",
  },
  {
    name: "createdAt",
    align: "left",
    label: "วันที่ดำเนินการ",
    sortable: true,
    field: "createdAt",
    headerStyle: "font-size: 14px",
    style: "font-size: 14px",
    format(val) {
      return date2Thai(val);
    },
  },
  {
    name: "status",
    align: "left",
    label: "สถานะ",
    sortable: true,
    field: "status",
    headerStyle: "font-size: 14px",
    style: "font-size: 14px",
    format: (val) => statusText(val),
  },
]);

/**
 * ฟังก์ชั่นยืนยันและส่งคนไปสร้างคำสั่ง
 */
function saveOrder() {
  // dialogConfirm(
  //   $q,
  //   async () => {
  modalCommand.value = true;
  modal.value = false;
  // },
  // "ยืนยันส่งไปออกคำสั่ง",
  // "ต้องการยืนยันส่งไปออกคำสั่งใช่หรือไม่?"
  // );
}

function onSearch() {
  rows.value = onSearchDataTable(
    filter.value,
    rowsData.value,
    columns2.value ? columns2.value : []
  );
}

/**
 * เมื่อ props.modal เป็น true
 * กำหนดให้  selected เป็นค่าว่าง
 */
watch(
  () => modal.value,
  () => {
    if (modal.value === true) {
      selected.value = [];
    }
  }
);
</script>

<template>
  <q-dialog v-model="modal" persistent>
    <q-card style="min-width: 85%">
      <DialogHeader :tittle="'ส่งไปออกคำสั่ง'" :close="closeModal" />
      <q-separator />
      <q-card-section>
        <div class="row col-12 q-col-gutter-sm">
          <div class="col-12">
            <div class="row q-col-gutter-xs items-end">
              <div class="col-xs-0 col-sm-4 col-md-6 col-lg-8"></div>

              <div class="col-xs-12 col-sm-8 col-md-6 col-lg-4">
                <div class="row q-col-gutter-sm">
                  <div class="col-xs-12 col-sm-6 col-md-6 col-lg-7">
                    <q-input
                      borderless
                      outlined
                      dense
                      v-model="filter"
                      placeholder="ค้นหา"
                      @keydown.enter.prevent="onSearch"
                    >
                      <template v-slot:append>
                        <q-icon name="search" />
                        <!-- <q-icon
                      v-if="filter !== ''"
                      name="clear"
                      class="cursor-pointer"
                      @click="filter = ''"
                    /> -->
                      </template>
                    </q-input>
                  </div>
                  <div class="col-xs-12 col-sm-6 col-md-6 col-lg-5">
                    <q-select
                      v-model="visibleColumns2"
                      multiple
                      outlined
                      dense
                      options-dense
                      :display-value="$q.lang.table.columns"
                      emit-value
                      map-options
                      :options="columns2"
                      option-value="name"
                    />
                  </div>
                </div>
              </div>
            </div>
          </div>

          <div class="col-12">
            <d-table
              :columns="columns2"
              :rows="rows"
              row-key="id"
              :visible-columns="visibleColumns2"
              selection="multiple"
              v-model:selected="selected"
            >
              <template v-slot:header-selection="scope">
                <q-checkbox
                  keep-color
                  color="primary"
                  dense
                  v-model="scope.selected"
                />
              </template>

              <template v-slot:body="props">
                <q-tr :props="props" class="cursor-pointer">
                  <q-td>
                    <q-checkbox
                      keep-color
                      color="primary"
                      dense
                      v-model="props.selected"
                    />
                  </q-td>
                  <q-td v-for="col in props.cols" :key="col.id">
                    <div v-if="col.name === 'no'">
                      {{ props.rowIndex + 1 }}
                    </div>
                    <div
                      v-else-if="col.name === 'organizationPositionOld'"
                      class="text-html"
                    >
                      {{ props.row.organizationPositionOld ?? "-" }}
                    </div>

                    <div v-else>
                      {{ col.value ? col.value : "-" }}
                    </div>
                  </q-td>
                </q-tr>
              </template>
            </d-table>
          </div>
        </div>
      </q-card-section>
      <q-separator />
      <q-card-actions align="right">
        <q-btn
          label="ส่งไปออกคำสั่ง"
          @click="saveOrder"
          :disable="selected.length === 0"
          color="public"
          ><q-tooltip>ส่งไปออกคำสั่ง</q-tooltip></q-btn
        >
      </q-card-actions>
    </q-card>
  </q-dialog>

  <!-- dialog สร้างคำสั่ง -->
  <DialogCreateCommand
    v-model:modal="modalCommand"
    command-type-code="C-PM-13"
    :persons="dataMapToSend"
    :fetch-data="props.fetchData"
  />
</template>
