<script setup lang="ts">
import { ref, defineAsyncComponent, watch, onMounted, onUpdated } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";
import { useRoute, useRouter } from "vue-router";
import { useAssignDataStore } from "@/modules/05_placement/storeAssign";
const Header = defineAsyncComponent(
  () =>
    import(
      "@/modules/05_placement/components/probation/FormEvaluation/Header.vue"
    )
);
const FormSaveResult = defineAsyncComponent(
  () =>
    import(
      "@/modules/05_placement/components/probation/FormEvaluation/FormSaveResult.vue"
    )
);

import http from "@/plugins/http";
import config from "@/app.config";
const router = useRouter();
const route = useRoute();
const $q = useQuasar();
const assignStore = useAssignDataStore();
const { fecthdataAssign } = assignStore;
const mixin = useCounterMixin();
const { showLoader, hideLoader, messageError } = mixin;
const assignId = ref<string>(route.params.form.toString());
const personalId = ref<string>(route.params.personalId.toString());
const fullname = ref<string>("");
const tab = ref<string>("save1");
const dataArrayNumber = ref<number>();
const dataRole = ref<string>("mentor");
onMounted(async () => {
  await fecthAssign(assignId.value);
});
const fecthAssign = async (id: string) => {
  showLoader();
  await http
    .get(config.API.formevaluate(id))
    .then(async (res: any) => {
      await fecthdataAssign(res.data.data);
      fullname.value = res.data.data.experimentee ? res.data.data.experimentee.name : "";
      dataArrayNumber.value = 1;
    })
    .catch((e: any) => {
      messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
};
const changeTab = (tabVal: string) => {
  tab.value = tabVal;
  dataArrayNumber.value = Number(tabVal.charAt(4));
};
const downloadFile = (response: any, filename: string) => {
  const link = document.createElement("a");
  var fileName = filename;
  link.href = window.URL.createObjectURL(new Blob([response.data]));
  link.setAttribute("download", fileName);
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
};
const FileDownload = async (type: string) => {
  let numTab = assignStore.evaluate.find(
    (e: any) => e.no === dataArrayNumber.value
  );
  //ผู้ดูเเล
  if (dataRole.value == "mentor") {
    showLoader();
    await http
      .get(config.API.reportEvaluateRecord1(type, numTab.id), {
        responseType: "blob",
      })
      .then(async (res) => {
        downloadFile(
          res,
          `แบบบันทึกผล(ผู้ดูเเล)_${fullname.value}_ครั้งที่${numTab.no}.${type}`
        );
      })
      .catch((e) => {
        messageError($q, e);
      })
      .finally(() => {
        hideLoader();
      });
  } else {
    //ผุ้บังคับ
    showLoader();
    await http
      .get(config.API.reportEvaluateRecord2(type, numTab.id), {
        responseType: "blob",
      })
      .then(async (res) => {
        downloadFile(
          res,
          `แบบบันทึกผล(ผู้บังคับบัญชา)_${fullname.value}_ครั้งที่${numTab.no}.${type}`
        );
      })
      .catch((e) => {
        messageError($q, e);
      })
      .finally(() => {
        hideLoader();
      });
  }
};
const addData = () => {
  router.push(
    `/probation/detail/addresult/${personalId.value}/${assignId.value}`
  );
};
</script>

<template>
  <Header
    v-if="assignStore.tabs.length > 0"
    :change-tab="changeTab"
    :add-data="addData"
    :loop="assignStore.tabs.length"
    :FileDownload="FileDownload"
  />
  <q-tab-panels
    v-model="tab"
    animated
    swipeable
    vertical
    transition-prev="jump-up"
    transition-next="jump-up"
    v-if="assignStore.tabs.length > 0"
    class="mt"
  >
    <q-tab-panel
      v-for="item in assignStore.evaluate"
      :name="`save${item.no}`"
      :key="item.no"
    >
      <FormSaveResult
        :tab="tab"
        :data="assignStore.evaluate.find((x: any) => x.no === dataArrayNumber)"
        action="edit"
      />
    </q-tab-panel>

    <!-- <q-page-container>
      <FormSaveResult
        :tab="tab"
        :data="assignStore.evaluate.find((x: any) => x.no === dataArrayNumber)"
        action="edit"
      />
    </q-page-container> -->
  </q-tab-panels>

  <div class="q-gutter-md" v-else-if="assignStore.tabs.length == 0">
    <div class="flex justify-center items-center q-my-md q-gutter-md">
      <q-btn
        outline
        color="primary"
        label="สร้างแบบบันทึกผล"
        @click="addData"
      />
    </div>
  </div>
</template>
<style lang="scss" scoped>
.mt {
  margin-top: 25px;
}
</style>
