<!-- 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/01_exam/interface/index/Main'
import Information from '@/modules/01_exam/components/Form/Information.vue'
import Address from '@/modules/01_exam/components/Form/Address.vue'
import Family from '@/modules/01_exam/components/Form/Family.vue'
import Occupation from '@/modules/01_exam/components/Form/Occupation.vue'
import Education from '@/modules/01_exam/components/Form/Education.vue'
import Career from '@/modules/01_exam/components/Form/Career.vue'
import Document from '@/modules/01_exam/components/Form/Document.vue'

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 loader = ref<boolean>(true)
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 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(() => {
  fetchPrefix()
  fetchRelationship()
  fetchProvince()
})

const fetchPrefix = async () => {
  loader.value = true
  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) => {})
    .finally(() => {
      loader.value = false
    })
}

const fetchRelationship = async () => {
  loader.value = true
  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) => {})
    .finally(() => {
      loader.value = false
    })
}

const fetchProvince = async () => {
  loader.value = true
  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) => {})
    .finally(() => {
      loader.value = false
    })
}
</script>
