<script setup lang="ts">
import DialogHeader from "@/components/DialogHeader.vue";
import { ref, reactive, watch } from "vue";
import { useCounterMixin } from "@/stores/mixin";
import { useQuasar } from "quasar";

import http from "@/plugins/http";
import config from "@/app.config";
import { useRoute } from "vue-router";

const props = defineProps({
  getAll:Function
})
const route = useRoute();
const idKpi = ref<string>(route.params.id.toLocaleString());

const $q = useQuasar();
const mixin = useCounterMixin();
const {
  showLoader,
  hideLoader,
  dialogConfirm,
  messageError,
  success,
  dialogMessageNotify,
} = mixin;

const modal = defineModel<boolean>("modal", { required: true });
const id = defineModel<string>("id", { required: true });

const formData = reactive({
  name: "",
  group: [],
  target: "",
  isDevelopment70: false,
  isDevelopment20: false,
  isDevelopment10: false,
  achievement10: "มีผลการพัฒนาและมีการดำเนินการตามเป้าหมายการนำไปพัฒนางาน",
  achievement5: "มีผลการพัฒนาแต่ยังไม่ได้ดำเนินการตามเป้าหมายการนำไปพัฒนางาน",
  achievement0: "ไม่ได้ดำเนินการพัฒนา",
});
function close() {
  modal.value = false;
  id.value = "";

  formData.name = "";
  formData.group = [];
  formData.target = "";
  formData.isDevelopment70 = false;
  formData.isDevelopment20 = false;
  formData.isDevelopment10 = false;
  formData.achievement10 =
    "มีผลการพัฒนาและมีการดำเนินการตามเป้าหมายการนำไปพัฒนางาน";
  formData.achievement5 =
    "มีผลการพัฒนาแต่ยังไม่ได้ดำเนินการตามเป้าหมายการนำไปพัฒนางาน";
  formData.achievement0 = "ไม่ได้ดำเนินการพัฒนา";
  props.getAll?.()
}

function onSubmit() {
  if (
    formData.isDevelopment70 == false &&
    formData.isDevelopment20 == false &&
    formData.isDevelopment10 == false
  ) {
    dialogMessageNotify($q, "กรุณาเลือกวิธีการพัฒนา อย่างน้อย 1 ตัวเลือก");
  } else {
    dialogConfirm($q, () => {
      const url = id.value
        ? config.API.kpiAchievementDevelop + `/${id.value}`
        : config.API.kpiAchievementDevelop;
      const body = {
        name: formData.name,
        target: formData.target,
        achievement10: formData.achievement10,
        achievement5: formData.achievement5,
        achievement0: formData.achievement0,
        isDevelopment70: formData.isDevelopment70,
        isDevelopment20: formData.isDevelopment20,
        isDevelopment10: formData.isDevelopment10,
        kpiUserEvaluationId: idKpi.value,
      };
      showLoader();
      http[id.value ? "put" : "post"](url, body)
        .then((res) => {
          success($q, "บันทึกข้อมูลสำเร็จ");
          close();
        })
        .catch((e) => {
          messageError($q, e);
        })
        .finally(() => {
          hideLoader();
        });
    });
  }
}
watch(
  () => id.value,
  (i) => {
    if (i) {
      showLoader();
      http
        .get(config.API.kpiAchievementDevelop + `/${id.value}`)
        .then((res) => {
          const data = res.data.result;
          formData.name = data.name;
          formData.group = data.group;
          formData.target = data.target;
          formData.isDevelopment70 = data.isDevelopment70;
          formData.isDevelopment20 = data.isDevelopment20;
          formData.isDevelopment10 = data.isDevelopment10;
          formData.achievement10 = data.achievement10;
          formData.achievement5 = data.achievement5;
          formData.achievement0 = data.achievement0;
        })
        .catch((e) => {
          messageError($q, e);
        })
        .finally(() => {
          hideLoader();
        });
    }
  }
);
</script>
<template>
  <q-dialog persistent v-model="modal">
    <q-card style="width: 80%">
      <q-form greedy @submit.prevent @validation-success="onSubmit">
        <DialogHeader
          :tittle="`${id ? 'แก้ไข' : 'เพิ่ม'}การพัฒนาตนเอง`"
          :close="close"
        />
        <q-separator />
        <q-card-section>
          <div class="row q-col-gutter-sm">
            <div class="col-12">
              <q-input
                v-model="formData.name"
                outlined
                dense
                :rules="[(val:string) => !!val || `${'กรุณากรอกชื่อเรื่อง / เนื้อเรื่อง / หัวข้อการพัฒนา'}`,]"
                lazy-rules
                hide-bottom-space
                class="inputgreen"
                label="ชื่อเรื่อง / เนื้อเรื่อง / หัวข้อการพัฒนา"
              >
              </q-input>
            </div>
            <div class="col-12">
              <span class="text-grey-6 text-weight-medium">วิธีการพัฒนา</span>
            </div>
            <div class="column">
              <q-checkbox
                v-model="formData.isDevelopment70"
                label="70 การลงมือปฏิบัติ (โดยผู้บังคับบัญชามอบหมาย)"
              />
              <q-checkbox
                v-model="formData.isDevelopment20"
                label="20 การเรียนรู้จากผู้อื่น (Coach/Mentor/Consulting)"
              />
              <q-checkbox
                v-model="formData.isDevelopment10"
                label="10 การฝึกอบรมอื่นๆ"
              />
            </div>
            <div class="col-12">
              <q-input
                label="เป้าหมายการนำไปพัฒนางาน"
                v-model="formData.target"
                outlined
                type="textarea"
                dense
                class="inputgreen"
                :rules="[(val:string) => !!val || `${'กรุณากรอกเป้าหมายการนำไปพัฒนางาน'}`,]"
                lazy-rules
                hide-bottom-space
              ></q-input>
            </div>
            <div class="col-12">
              <q-card bordered>
                <div class="bg-grey-2 row q-py-sm text-weight-bold col-12">
                  <div class="col-4 text-center">
                    <span>ระดับคะแนน</span>
                  </div>
                  <div class="col-8 text-start">
                    <span>เกณฑ์การประเมิน</span>
                  </div>
                </div>
                <div class="row q-pa-sm">
                  <div class="col-4 text-center self-start text-body1">
                    <span>10</span>
                  </div>
                  <div class="col-8">
                    <q-input
                      class="inputgreen"
                      v-model="formData.achievement10"
                      outlined
                      dense
                      label="เกณฑ์การประเมิน"
                      :rules="[(val:string) => !!val || `${'กรุณากรอกเกณฑ์การประเมิน'}`,]"
                      lazy-rules
                      hide-bottom-space
                    ></q-input>
                  </div>
                </div>
                <q-separator />
                <div class="row q-pa-sm bg-grey-2">
                  <div class="col-4 text-center self-start text-body1">
                    <span>5</span>
                  </div>
                  <div class="col-8">
                    <q-input
                      class="inputgreen"
                      v-model="formData.achievement5"
                      outlined
                      dense
                      label="เกณฑ์การประเมิน"
                      :rules="[(val:string) => !!val || `${'กรุณากรอกเกณฑ์การประเมิน'}`,]"
                      lazy-rules
                      hide-bottom-space
                    ></q-input>
                  </div>
                </div>
                <q-separator />
                <div class="row q-pa-sm">
                  <div class="col-4 text-center self-start text-body1">
                    <span>0</span>
                  </div>
                  <div class="col-8">
                    <q-input
                      class="inputgreen"
                      v-model="formData.achievement0"
                      outlined
                      dense
                      label="เกณฑ์การประเมิน"
                      :rules="[(val:string) => !!val || `${'กรุณากรอกเกณฑ์การประเมิน'}`,]"
                      lazy-rules
                      hide-bottom-space
                    ></q-input>
                  </div>
                </div>
              </q-card>
            </div>
          </div>
        </q-card-section>
        <q-separator />

        <q-card-actions align="right" class="bg-white text-teal">
          <q-btn label="บันทึก" color="secondary" type="submit"
            ><q-tooltip>บันทึกข้อมูล</q-tooltip></q-btn
          >
        </q-card-actions>
      </q-form>
    </q-card>
  </q-dialog>
</template>
