<script setup lang="ts">
import { ref, onMounted } from "vue";
import { useQuasar } from "quasar";
import { useRouter, useRoute } from "vue-router";
import { useCounterMixin } from "@/stores/mixin";
import http from "@/plugins/http";
import config from "@/app.config";
import type { QForm } from "quasar";
import Dialog from "@/modules/03_retire/views/DialogRetire.vue";

const mixin = useCounterMixin();
const {
  date2Thai,
  dateToISO,
  success,
  messageError,
  showLoader,
  hideLoader,
  dialogConfirm,
} = mixin;
const router = useRouter();
const route = useRoute();
const $q = useQuasar();
const routeName = router.currentRoute.value.name;

/**
 * ตัวแปรที่ใช้งาน
 */
const id = ref<string>("");
const myform = ref<QForm | null>(null);
const tranferOrg = ref("");
const dateCommand = ref<Date>(new Date());
const dateLeave = ref<Date>(new Date());
const noteReason = ref("");
const modal = ref<boolean>(false);
/** ข้อมูล v-model ของฟอร์ม */
const dataDetail = ref<any>({
  datetext: "",
  activeDate: new Date(),
  createdAt: new Date(),
  firstName: "",
  id: "",
  isActive: true,
  lastName: "",
  location: "",
  organizationPositionOld: "",
  positionLevelOld: "",
  positionNumberOld: "",
  positionTypeOld: "",
  prefix: "",
  profileId: "",
  reason: "",
  salary: 0,
  sendDate: new Date(),
  status: "",
  statustext: "",
  fullname: "",
});

/**
 * ฟังก์ชั่นย้อนกลับไปยังหน้ารายการลาออก
 */
const clickBack = () => {
  router.push(`/retire`);
};

/**
 * ฟังก์ชั่นเปลี่ยนเป็น string ของ status
 * @param val value ของ status true/false
 */
const statusOrder = (val: boolean) => {
  switch (val) {
    case true:
      return "ยับยั้งการลาออก";
    case false:
      return "อนุมัติการลาออก";
  }
};

/**
 * เรียกฟังก์ชันทั้งหมดตอนเรียกใช้ไฟล์นี้
 */
onMounted(() => {
  if (route.params.id !== undefined) {
    id.value = route.params.id.toString();
    fectDataresign(id.value);
  }
});

/**
 * บันทึกข้อมูลการลาออก
 */
const onSubmit = async () => {
  dialogConfirm(
    $q,
    () => {
      showLoader();
      const formData = new FormData();
      formData.append("Location", tranferOrg.value);
      formData.append("SendDate", dateToISO(dateCommand.value));
      formData.append("ActiveDate", dateToISO(dateLeave.value));
      formData.append("Reason", noteReason.value);
      formData.append("file", files.value);

      http
        .post(config.API.listResign(), formData)
        .then((res) => {
          let data = res.data.result.id;
          success($q, "บันทึกข้อมูลสำเร็จ");
          router.push(`/retire/result/${data}`);
        })
        .catch((e) => {
          messageError($q, e);
        })
        .finally(() => {
          hideLoader();
        });
    },
    "ยืนยันการยื่นข้อมูลลาออก",
    "ต้องการยื่นข้อมูลลาออกนี้ใช่หรือไม่"
  );
};

const files = ref<any>();

//ยกเลิกการลาออก
const cancelResing = () => {
  modal.value = true;
};

/**
 * ฟังก์ชั่นเรียกข้อมูลจาก Api
 * @param id ไอดีของข้อมูล
 */
const fectDataresign = async (id: string) => {
  showLoader();
  await http
    .get(config.API.resingByid(id))
    .then((res) => {
      let data = res.data.result;
      tranferOrg.value = data.location;
      dateCommand.value = data.sendDate;
      dateLeave.value = data.activeDate;
      noteReason.value = data.reason;
      files.value = data.docs;
      dataDetail.value = data;
    })
    .catch((e) => {
      messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
};

function downloadFile(data: string) {
  window.open(data, "_blank");
}
</script>
<template>
  <div class="col-12 row justify-center">
    <div class="col-xs-12 col-sm-12 col-md-11">
      <div class="toptitle text-white col-12 row items-center">
        <q-btn
          icon="mdi-arrow-left"
          unelevated
          round
          dense
          flat
          color="primary"
          class="q-mr-sm"
          @click="router.go(-1)"
        />
        <div v-if="routeName == 'AddRetire'">เพิ่มเรื่องลาออก</div>
        <div v-else>รายละเอียดเรื่องลาออก</div>
      </div>
      <q-form
        ref="myform"
        class="col-12"
        greedy
        @submit.prevent
        @validation-success="onSubmit"
      >
        <q-card bordered>
          <div class="col-12 row q-col-gutter-sm q-pa-md">
            <div class="col-xs-12 col-sm-12">
              <div class="col-12 row q-pa-sm q-col-gutter-sm">
                <q-input
                  :class="
                    routeName !== 'AddRetire'
                      ? 'col-md-8 col-xs-12'
                      : 'col-md-8 col-xs-12 inputgreen'
                  "
                  class=""
                  dense
                  outlined
                  v-model="tranferOrg"
                  hide-bottom-space
                  label="สถานที่ยื่นขอลาออกจากราชการ"
                  :readonly="routeName != 'AddRetire'"
                  :rules="[(val:string) => !!val || `${'กรุณากรอกสถานที่ยื่นขอลาออกจากราชการ'}`]"
                />
                <datepicker
                  :class="
                    routeName !== 'AddRetire'
                      ? 'col-md-2 col-xs-12'
                      : 'col-md-2 col-xs-12 inputgreen'
                  "
                  menu-class-name="modalfix"
                  v-model="dateCommand"
                  :locale="'th'"
                  autoApply
                  readonly
                  borderless
                  :enableTimePicker="false"
                  week-start="0"
                >
                  <template #year="{ year }">
                    {{ year + 543 }}
                  </template>
                  <template #year-overlay-value="{ value }">
                    {{ parseInt(value + 543) }}
                  </template>
                  <template #trigger>
                    <q-input
                      outlined
                      readonly
                      dense
                      hide-bottom-space
                      class="full-width datepicker"
                      :model-value="
                        dateCommand != null ? date2Thai(dateCommand) : null
                      "
                      :label="`${'วันที่ยื่นขอลาออกจากราชการ'}`"
                      :rules="[
                        (val) =>
                          !!val || `${'กรุณาเลือกวันที่ยื่นขอลาออกจากราชการ'}`,
                      ]"
                    >
                      <template v-slot:prepend>
                        <q-icon
                          name="event"
                          class="cursor-pointer"
                          style="color: var(--q-primary)"
                        >
                        </q-icon>
                      </template>
                    </q-input>
                  </template>
                </datepicker>
                <datepicker
                  :class="
                    routeName !== 'AddRetire'
                      ? 'col-md-2 col-xs-12'
                      : 'col-md-2 col-xs-12 inputgreen'
                  "
                  menu-class-name="modalfix"
                  v-model="dateLeave"
                  :locale="'th'"
                  autoApply
                  borderless
                  :enableTimePicker="false"
                  week-start="0"
                  :readonly="routeName != 'AddRetire'"
                >
                  <template #year="{ year }">
                    {{ year + 543 }}
                  </template>
                  <template #year-overlay-value="{ value }">
                    {{ parseInt(value + 543) }}
                  </template>
                  <template #trigger>
                    <q-input
                      outlined
                      dense
                      hide-bottom-space
                      :readonly="routeName != 'AddRetire'"
                      class="full-width datepicker"
                      :model-value="
                        dateLeave != null ? date2Thai(dateLeave) : null
                      "
                      :label="`${'วันที่ขอลาออกจากราชการ'}`"
                      :rules="[
                        (val) =>
                          !!val || `${'กรุณาเลือกวันที่ขอลาออกจากราชการ'}`,
                      ]"
                    >
                      <template v-slot:prepend>
                        <q-icon
                          name="event"
                          class="cursor-pointer"
                          style="color: var(--q-primary)"
                        >
                        </q-icon>
                      </template>
                    </q-input>
                  </template>
                </datepicker>
                <q-input
                  :class="
                    routeName !== 'AddRetire' ? 'col-12' : 'col-12 inputgreen'
                  "
                  dense
                  outlined
                  v-model="noteReason"
                  label="เหตุผลที่ลาออกจากราชการ"
                  type="textarea"
                  hide-bottom-space
                  :readonly="routeName != 'AddRetire'"
                  :rules="[
                    (val) => !!val || `${'กรุณากรอกเหตุผลที่ลาออกจากราชการ'}`,
                  ]"
                />

                <div class="col-12 row" v-if="routeName == 'AddRetire'">
                  <q-file
                    v-model="files"
                    class="col-xs-12 col-sm-12 inputgreen"
                    outlined
                    dense
                    lazy-rules
                    hide-bottom-space
                    accept=".pdf"
                    :rules="[
                      (val) => !!val || 'กรุณากรอกอัพโหลดเอกสารเพิ่มเติม',
                    ]"
                    label="เอกสารเพิ่มเติม"
                  >
                    <template v-slot:prepend>
                      <q-icon name="attach_file" /> </template
                  ></q-file>
                  <!-- <q-uploader
                    flat
                    bordered
                    class="col-xs-12 col-sm-12"
                    accept=".jpg,.png,.pdf,.csv,.doc"
                    url="http://localhost:4444/upload"
                    label="เอกสารเพิ่มเติม"
                    type="file"
                    @added="fileUploadDoc"
                    @removed="filesNull"
                    style="max-width: px"
                  /> -->
                </div>
                <div class="col-12 row">
                  <q-card
                    bordered
                    flat
                    class="row col-12 text-dark q-mt-sm"
                    v-if="routeName != 'AddRetire'"
                  >
                    <div
                      class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
                    >
                      <div class="q-pl-sm text-weight-bold text-dark">
                        เอกสารเพิ่มเติม
                      </div>
                    </div>
                    <q-list class="col-12">
                      <q-item
                        v-for="file in files"
                        :key="file.key"
                        class="q-my-xs"
                      >
                        <q-item-section>
                          <q-item-label class="full-width ellipsis">
                            {{ file.fileName }}
                          </q-item-label>

                          <q-item-label caption> </q-item-label>
                        </q-item-section>
                        <q-space />

                        <q-btn
                          size="12px"
                          flat
                          round
                          dense
                          color="blue"
                          icon="mdi-download"
                          @click="downloadFile(file.pathName)"
                          ><q-tooltip>ดาวน์โหลดไฟล์</q-tooltip></q-btn
                        >
                      </q-item>
                    </q-list>
                  </q-card>
                </div>
                <div class="col-12 row">
                  <q-card
                    bordered
                    class="row col-12 text-dark q-mt-sm"
                    v-if="routeName != 'AddRetire'"
                  >
                    <div
                      class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
                    >
                      <div class="q-pl-sm text-weight-bold text-dark">
                        ผลการพิจารณาของผู้บังคับบัญชา
                      </div>
                    </div>
                    <q-separator />
                    <div class="row col-12 q-pa-md">
                      <div class="col-12 row bg-white q-col-gutter-md">
                        <div class="col-xs-6 row items-start">
                          <div class="col-12 text-top">สถานะ</div>
                          <div class="col-12 text-detail">
                            {{
                              dataDetail.commanderReject !== null
                                ? statusOrder(dataDetail.commanderReject)
                                : "-"
                            }}
                          </div>
                        </div>
                        <div class="col-xs-6 row items-start">
                          <div class="col-12 text-top">
                            วันสุดท้ายที่ยับยั้ง
                          </div>
                          <div class="col-12 text-detail">
                            {{
                              dataDetail.commanderRejectDate !== null
                                ? date2Thai(dataDetail.commanderRejectDate)
                                : "-"
                            }}
                          </div>
                        </div>
                        <div class="col-xs-12 row items-start">
                          <div class="col-12 text-top">
                            ความคิดเห็นและเหตุผล
                          </div>
                          <div
                            class="col-12 text-detail"
                            v-if="dataDetail.commanderReject === false"
                          >
                            {{
                              dataDetail.commanderApproveReason !== null
                                ? dataDetail.commanderApproveReason
                                : "-"
                            }}
                          </div>
                          <div
                            class="col-12 text-detail"
                            v-if="dataDetail.commanderReject === true"
                          >
                            {{
                              dataDetail.commanderRejectReason !== null
                                ? dataDetail.commanderRejectReason
                                : "-"
                            }}
                          </div>
                        </div>
                      </div>
                    </div>
                  </q-card>
                </div>
                <div class="col-12 row">
                  <q-card
                    bordered
                    class="row col-12 text-dark q-mt-sm"
                    v-if="routeName != 'AddRetire'"
                  >
                    <div
                      class="bg-grey-1 q-pa-sm col-12 row items-center text-primary"
                    >
                      <div class="q-pl-sm text-weight-bold text-dark">
                        ผลการพิจารณาของผู้มีอำนาจ
                      </div>
                    </div>
                    <q-separator />
                    <div class="row col-12 q-pa-md">
                      <div class="col-12 row bg-white q-col-gutter-md">
                        <div class="col-xs-6 row items-start">
                          <div class="col-12 text-top">สถานะ</div>
                          <div class="col-12 text-detail">
                            {{
                              dataDetail.oligarchReject !== null
                                ? statusOrder(dataDetail.oligarchReject)
                                : "-"
                            }}
                          </div>
                        </div>
                        <div class="col-xs-6 row items-start">
                          <div class="col-12 text-top">
                            วันสุดท้ายที่ยับยั้ง
                          </div>
                          <div class="col-12 text-detail">
                            {{
                              dataDetail.oligarchRejectDate !== null
                                ? date2Thai(dataDetail.oligarchRejectDate)
                                : "-"
                            }}
                          </div>
                        </div>
                        <div class="col-xs-12 row items-start">
                          <div class="col-12 text-top">
                            ความคิดเห็นและเหตุผล
                          </div>
                          <div
                            class="col-12 text-detail"
                            v-if="dataDetail.oligarchReject == false"
                          >
                            {{
                              dataDetail.oligarchApproveReason !== null
                                ? dataDetail.oligarchApproveReason
                                : "-"
                            }}
                          </div>
                          <div
                            class="col-12 text-detail"
                            v-else-if="dataDetail.oligarchReject == true"
                          >
                            {{
                              dataDetail.oligarchRejectReason !== null
                                ? dataDetail.oligarchRejectReason
                                : "-"
                            }}
                          </div>
                        </div>
                      </div>
                    </div>
                  </q-card>
                </div>
              </div>
            </div>

            <div class="row col-12 q-pa-md" v-if="routeName != 'AddRetire'">
              <q-space />
              <q-btn
                v-if="
                  dataDetail.status !== 'DELETE' &&
                  dataDetail.status !== 'DONE' &&
                  dataDetail.status !== 'CANCEL'
                "
                unelevated
                dense
                class="q-px-md items-center"
                color="orange"
                label="ยกเลิกการลาออก"
                @click="cancelResing"
                :disable="tranferOrg == '' && noteReason == ''"
              />
            </div>
          </div>
          <q-separator v-if="routeName == 'AddRetire'" />
          <div class="row col-12 q-pa-md" v-if="routeName == 'AddRetire'">
            <q-space />
            <q-btn
              unelevated
              dense
              class="q-px-md items-center"
              color="primary"
              label="ยื่นเรื่องขอลาออก"
              type="submit"
            />
          </div>
        </q-card>
      </q-form>
    </div>
  </div>

  <Dialog v-model:modal="modal" :fectData="fectDataresign" />
</template>
