<script setup lang="ts">
import { ref, onMounted } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import { useRoute } from "vue-router";
import axios from "axios";
import http from "@/plugins/http";
import config from "@/app.config";

/** importStore*/
import { useEvaluateDetailStore } from "@/modules/12_evaluatePersonal/store/EvaluateDetail";

/** use*/
const $q = useQuasar();
const route = useRoute();
const store = useEvaluateDetailStore();
const mixin = useCounterMixin();
const {
  dialogConfirm,
  date2Thai,
  showLoader,
  hideLoader,
  messageError,
  success,
} = mixin;

const page = ref<number>(1);
const numOfPages = ref<number>(0);
const modalView = ref<boolean>(false);
const AnnouncementStartDate = ref<string | null>();
const AnnouncementEndDate = ref<string | null>();
const id = ref<string>(route.params.id as string);
const pdfSrc = ref<any>();
const fileEvaluation5 = ref<any>();
const fileEvaluation5Ref = ref<any>();
const files = [
  {
    id: "file1",
    fileName: "แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)",
    pathName: "5-แบบสรุปข้อมูลของผู้ขอรับการคัดเลือก (เอกสารหมายเลข 9)",
  },
  {
    id: "file2",
    fileName: "ประกาศผลการคัดเลือกบุคคล (เอกสารหมายเลข 10)",
    pathName: "10-ประกาศผลการคัดเลือกบุคคล (เอกสารหมายเลข 10)",
  },
  {
    id: "file3",
    fileName: "ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)",
    pathName: "6-ผลงานที่จะส่งประเมิน (เอกสารหมายเลข 11)",
  },
  {
    id: "file4",
    fileName:
      "แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)",
    pathName:
      "3-แบบตรวจสอบความถูกต้องครบถ้วนของข้อมูลเพื่อประกอบการคัดเลือกบุคคล (เอกสารแบบ ก)",
  },
];

/** function บันทึกแจ้งผลการประกาศคัดเลือก*/
async function save() {
  download10Url.value === ""
    ? (fileEvaluation5.value = "")
    : fileEvaluation5.value;
  fileEvaluation5Ref.value.validate();
  if (
    fileEvaluation5Ref.value.hasError === false &&
    download10Url.value !== ""
  ) {
    dialogConfirm($q, async () => {
      await showLoader();
      http
        .put(config.API.evaluationNext5To6(id.value))
        .then(() => {
          success($q, "บันทึกแจ้งผลการประกาศคัดเลือกสำเร็จ");
        })
        .catch((e) => {
          messageError($q, e);
        })
        .finally(() => {
          store.step = 6;
          store.currentStep = 6;
          hideLoader();
        });
    });
  }
}

/**
 * function เรียก link อัปโหลด
 * @param file ไฟล์
 */
function upLoadFile(file: any) {
  if (file) {
    showLoader();
    http
      .post(config.API.evaluationFileListbyId("เล่ม 1", id.value), {
        fileList: {
          fileName: "บันทึกแจ้งผลการประกาศคัดเลือก",
          metadata: {
            tag: "value",
            author: author.value,
            subject: subject.value,
          },
        },
      })
      .then((res) => {
        const foundKey: any = Object.keys(res.data).find(
          (key) =>
            res.data[key]?.fileName !== undefined &&
            res.data[key]?.fileName !== ""
        );
        const link = res.data[foundKey]?.uploadUrl;
        fileUpLoad(link);
      })
      .catch((e) => {
        messageError($q, e);
      })
      .finally(() => {
        hideLoader();
      });
  }
}

/**
 * function อัปโหลดไฟล์
 * @param url link อัปโหลด
 */
function fileUpLoad(url: string) {
  axios
    .put(url, fileEvaluation5.value, {
      headers: { "Content-Type": fileEvaluation5.value?.type },
      onUploadProgress: (e) => console.log(e),
    })
    .then(() => {
      success($q, "อัปโหลดไฟล์สำเร็จ");
    })
    .catch((e) => {
      messageError($q, e);
    })
    .finally(() => {
      checkDocResult();
    });
}

/** ไปหน้าต่อไปของรายงาน */
function nextPage() {
  if (page.value < numOfPages.value) {
    page.value++;
  }
}

/** กลับหน้าก่อนหน้าของรายงาน */
function backPage() {
  if (page.value !== 1) {
    page.value--;
  }
}

/**
 * function คัดลอก URL
 * @param name ชื่อไฟล์
 */
async function copyLink(name: string) {
  await http
    .get(config.API.evaluationFilebyId("เล่ม 1", id.value, name))
    .then((res) => {
      const link = res.data.downloadUrl;
      navigator.clipboard.writeText(link);
      success($q, "คัดลอกลิงก์สำเร็จ");
    })
    .catch((e) => {
      messageError($q, e);
    });
}

/** function เรียกข้อมูลวันที่ประกาศ*/
async function getDate() {
  showLoader();
  await http
    .get(config.API.evaluationDateAnnounce(id.value))
    .then((res) => {
      const data = res.data.result;
      AnnouncementStartDate.value = date2Thai(data.dateStartAnnounce);
      AnnouncementEndDate.value = date2Thai(data.dateEndAnnounce);
    })
    .catch((e) => {
      messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
}

const download10Url = ref<string>("");
/** function เช็คไฟล์อัปโหลด*/
async function checkDocResult() {
  showLoader();
  await http
    .get(
      config.API.evaluationPatchData(
        "เล่ม 1",
        id.value,
        "บันทึกแจ้งผลการประกาศคัดเลือก"
      )
    )
    .then((res: any) => {
      download10Url.value = res.data.downloadUrl;
    })
    .catch(() => {
      //   messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
}

const author = ref<string>("");
const subject = ref<string>("");
/** function เรียกข้อมูลผลงาน*/
async function fetchDataSigner() {
  showLoader();
  await http
    .get(config.API.evaluationSigner(id.value, 1))
    .then((res) => {
      const data = res.data.result;
      if (data) {
        author.value = data.author;
        subject.value = data.subject;
      }
    })
    .catch((e) => {
      messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
}

onMounted(async () => {
  await getDate();
  await checkDocResult();
  await fetchDataSigner();
});
</script>

<template>
  <div class="row q-col-gutter-sm q-pa-sm">
    <div class="col-12">
      <q-banner
        class="text-weight-bold text-red-14 bg-red-1 text-center rounded-borders"
      >
        <div class="text-weight-bold">
          <q-icon name="info_outline" color="red-14" size="24px" />
          ประกาศเมื่อวันที่ {{ AnnouncementStartDate }} ถึงวันที่
          {{ AnnouncementEndDate }}
        </div>
      </q-banner>
    </div>

    <div class="col-12">
      <q-card bordered style="border: 1px solid #d6dee1">
        <div class="text-weight-medium bg-grey-1 q-py-sm q-px-md">
          เอกสารประกาศผลการคัดเลือกบุคคล
        </div>
        <div class="col-12"><q-separator /></div>

        <q-list
          v-for="file in files"
          :key="file.id"
          class="full-width"
          bordered
          separator
        >
          <q-item clickable v-ripple>
            <q-item-section class="text-grey-9">{{
              file.fileName
            }}</q-item-section>
            <q-item-section avatar>
              <div class="row">
                <div>
                  <!-- <q-btn
                    :href="file.pathName"
                    target="_blank"
                    flat
                    round
                    color="blue-6"
                    icon="mdi-download"
                  >
                    <q-tooltip>คัดลอกลิ้งค์</q-tooltip>
                  </q-btn> -->
                  <q-btn
                    flat
                    round
                    dense
                    color="primary"
                    icon="mdi-clipboard-outline"
                    @click="copyLink(file.pathName)"
                  >
                    <q-tooltip>คัดลอกลิงก์</q-tooltip>
                  </q-btn>
                </div>
              </div>
            </q-item-section>
          </q-item>
        </q-list>
      </q-card>
    </div>
    <div class="col-12">
      <q-card bordered style="border: 1px solid #d6dee1">
        <div
          class="text-weight-medium row col-12 bg-grey-1 q-py-sm q-px-md items-center"
        >
          <div>บันทึกแจ้งผลการประกาศคัดเลือก</div>
          <q-space />
          <div>
            <q-btn
              v-if="download10Url != ''"
              :href="download10Url"
              target="_blank"
              class="col-12"
              icon="visibility"
              color="blue"
              flat
              dense
              round
            >
              <q-tooltip> ดูไฟล์เอกสาร </q-tooltip></q-btn
            >
          </div>
        </div>
        <div class="col-12" v-if="store.currentStep == 5"><q-separator /></div>
        <div class="col-12 q-pa-sm" v-if="store.currentStep == 5">
          <q-file
            ref="fileEvaluation5Ref"
            v-model="fileEvaluation5"
            class="col-12"
            outlined
            dense
            label="อัปโหลดไฟล์"
            hide-bottom-space
            lazy-rules
            accept=".pdf"
            :rules="
              download10Url === '' ? [(val) => !!val || 'กรุณาเลือกไฟล์'] : []
            "
          >
            <template v-slot:prepend>
              <q-icon name="attach_file" />
            </template>
            <template v-slot:after>
              <q-btn
                flat
                round
                dense
                color="primary"
                icon="mdi-upload"
                @click="upLoadFile(fileEvaluation5)"
                ><q-tooltip>อัปโหลดไฟล์</q-tooltip></q-btn
              >
            </template>
          </q-file>
        </div>
      </q-card>
    </div>

    <div class="col-12" v-if="store.currentStep == 5">
      <div class="q-mr-sm" align="right">
        <q-btn
          unelevated
          label="บันทึกแจ้งผลการประกาศคัดเลือก"
          color="public"
          @click="save"
        />
      </div>
    </div>
  </div>

  <q-dialog
    v-model="modalView"
    persistent
    :maximized="true"
    transition-show="slide-up"
    transition-hide="slide-down"
  >
    <q-card class="bg-white">
      <div class="flex justify-end items-center align-center q-mr-md q-mt-sm">
        <q-btn
          icon="close"
          unelevated
          round
          dense
          style="color: #ff8080; background-color: #ffdede"
          size="12px"
          v-close-popup
        />
      </div>
      <div class="q-pa-md">
        <div class="row items-start items-center">
          <div class="col">
            <q-btn
              padding="xs"
              icon="mdi-chevron-left"
              color="grey-2"
              text-color="grey-5"
              size="md"
              class="my-auto"
              @click="backPage"
              :disable="page == 1"
            />
          </div>
          <div class="col-12 col-md-auto">
            <div class="q-pa-md flex">
              หน้าที่ {{ page }} จาก {{ numOfPages }}
            </div>
          </div>
          <div class="col text-right">
            <q-btn
              padding="xs"
              icon="mdi-chevron-right"
              color="grey-2"
              text-color="grey-5"
              size="md"
              @click="nextPage"
              :disable="page === numOfPages"
            />
          </div>
        </div>
        <div class="row items- items-center">
          <VuePDF ref="vuePDFRef" :pdf="pdfSrc" :page="page" fit-parent />
        </div>
        <div class="row items- items-end">
          <div class="col">
            <q-btn
              padding="xs"
              icon="mdi-chevron-left"
              color="grey-2"
              text-color="grey-5"
              size="md"
              class="my-auto"
              @click="backPage"
              :disable="page == 1"
            />
          </div>
          <div class="col-12 col-md-auto">
            <div class="q-pa-md flex">
              หน้าที่ {{ page }} จาก {{ numOfPages }}
            </div>
          </div>
          <div class="col text-right">
            <q-btn
              padding="xs"
              icon="mdi-chevron-right"
              color="grey-2"
              text-color="grey-5"
              size="md"
              @click="nextPage"
              :disable="page === numOfPages"
            />
          </div>
        </div>
      </div>
    </q-card>
  </q-dialog>
</template>

<style scoped></style>
