<!-- tab ข้อมูลส่วนบุคคล -->
<template>
  <div class="q-px-sm">
    <Information
      :prefixOptions="prefixOptions"
      :relationshipOptions="relationshipOptions"
      :provinceOptions="provinceOptions"
      :status="status"
      v-model:form="formInformation"
    />
  </div>

  <q-separator class="q-my-lg bg-gray" size="5px" />
  <div class="q-px-sm">
    <Address
      :provinceOptions="provinceOptions"
      :status="status"
      v-model:form="formAddress"
    />
  </div>

  <q-separator class="q-my-lg bg-gray" size="5px" />
  <div class="q-px-sm">
    <Family
      :prefixOptions="prefixOptions"
      :status="status"
      v-model:form="formFamily"
    />
  </div>

  <q-separator class="q-my-lg bg-gray" size="5px" />
  <div class="q-px-sm">
    <Occupation :status="status" v-model:form="formOccupation" />
  </div>

  <q-separator class="q-my-lg bg-gray" size="5px" />
  <div class="q-px-sm">
    <Education :status="status" />
  </div>

  <q-separator class="q-my-lg bg-gray" size="5px" />
  <div class="q-px-sm">
    <Career :status="status" />
  </div>

  <q-separator class="q-my-lg bg-gray" size="5px" />
  <div class="q-px-sm">
    <Document :status="status" />
  </div>
</template>
<script setup lang="ts">
import { ref, onMounted, watch } from "vue";
import http from "@/plugins/http";
import config from "@/app.config";
import type { DataOption } from "@/modules/03_recruiting/interface/index/Main";
import Information from "@/modules/03_recruiting/components/Information.vue";
import Address from "@/modules/03_recruiting/components/Address.vue";
import Family from "@/modules/03_recruiting/components/Family.vue";
import Occupation from "@/modules/03_recruiting/components/Occupation.vue";
import Education from "@/modules/03_recruiting/components/Education.vue";
import Career from "@/modules/03_recruiting/components/Career.vue";
import Document from "@/modules/03_recruiting/components/Document.vue";

import { useQuasar } from "quasar";
import { useCounterMixin } from "@/stores/mixin";

const props = defineProps({
  status: {
    type: String,
    required: true,
  },
  formInformation: {
    type: Object,
    required: true,
  },
  formAddress: {
    type: Object,
    required: true,
  },
  formFamily: {
    type: Object,
    required: true,
  },
  formOccupation: {
    type: Object,
    required: true,
  },
});

const $q = useQuasar();

const prefixOptions = ref<DataOption[]>([]);
const relationshipOptions = ref<DataOption[]>([]);
const provinceOptions = ref<DataOption[]>([]);
const formInformation = ref<any>({});
const formAddress = ref<any>({});
const formFamily = ref<any>({});
const formOccupation = ref<any>({});
const mixin = useCounterMixin();
const { messageError, showLoader, hideLoader } = mixin;

const emit = defineEmits([
  "update:formInformation",
  "update:formAddress",
  "update:formFamily",
  "update:formOccupation",
]);

watch(formInformation, async (count: Object, prevCount: Object) => {
  emit("update:formInformation", count);
});

watch(formAddress, async (count: Object, prevCount: Object) => {
  emit("update:formAddress", count);
});

watch(formFamily, async (count: Object, prevCount: Object) => {
  emit("update:formFamily", count);
});

watch(formOccupation, async (count: Object, prevCount: Object) => {
  emit("update:formOccupation", count);
});

onMounted(() => {
  hideLoader();
  fetchPrefix();
  fetchRelationship();
  fetchProvince();
});

const fetchPrefix = async () => {
  showLoader();
  await http
    .get(config.API.prefix)
    .then((res) => {
      const data = res.data.result;
      let option: DataOption[] = [];
      data.map((r: any) => {
        option.push({ id: r.id.toString(), name: r.name.toString() });
      });
      prefixOptions.value = option;
    })
    .catch((e) => {
      messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
};

const fetchRelationship = async () => {
  showLoader();
  await http
    .get(config.API.relationship)
    .then((res) => {
      const data = res.data.result;
      let option: DataOption[] = [];
      data.map((r: any) => {
        option.push({ id: r.id.toString(), name: r.name.toString() });
      });
      relationshipOptions.value = option;
    })
    .catch((e) => {
      messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
};

const fetchProvince = async () => {
  showLoader();
  await http
    .get(config.API.province)
    .then((res) => {
      const data = res.data.result;
      let option: DataOption[] = [];
      data.map((r: any) => {
        option.push({ id: r.id.toString(), name: r.name.toString() });
      });
      provinceOptions.value = option;
    })
    .catch((e) => {
      messageError($q, e);
    })
    .finally(() => {
      hideLoader();
    });
};
</script>
