import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
import { defineAsyncComponent } from 'vue'

type SmallDetailDto = any

const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue'))
const statusBadge = defineAsyncComponent(() => import('./status-badge.vue'))

export const config: Config = {
  cols: [
    {},
    {},
    {},
    { width: 100 },
    { width: 120 },
    {},
    {},
    {},
    { width: 100 },
    { width: 100 },
    {},
    { width: 50 },
  ],

  headers: [
    [
      { label: 'Nama' },
      { label: 'Rekam Medis' },
      { label: 'KTP' },
      { label: 'Tgl Lahir' },
      { label: 'Umur' },
      { label: 'JK' },
      { label: 'Pendidikan' },
      { label: 'Status' },
      { label: '' },
    ],
  ],

  keys: [
    'name',
    'medicalRecord_number',
    'identity_number',
    'birth_date',
    'patient_age',
    'gender',
    'education',
    'status',
    'action',
  ],

  delKeyNames: [
    { key: 'code', label: 'Kode' },
    { key: 'name', label: 'Nama' },
  ],

  parses: {
    name: (rec: unknown): unknown => {
      const recX = rec as SmallDetailDto
      return `${recX.firstName} ${recX.middleName || ''} ${recX.lastName || ''}`
    },
    identity_number: (rec: unknown): unknown => {
      const recX = rec as SmallDetailDto
      if (recX.identity_number?.substring(0, 5) === 'BLANK') {
        return '(TANPA NIK)'
      }
      return recX.identity_number
    },
    birth_date: (rec: unknown): unknown => {
      const recX = rec as SmallDetailDto
      if (typeof recX.birth_date == 'object' && recX.birth_date) {
        return (recX.birth_date as Date).toLocaleDateString()
      } else if (typeof recX.birth_date == 'string') {
        return (recX.birth_date as string).substring(0, 10)
      }
      return recX.birth_date
    },
    patient_age: (rec: unknown): unknown => {
      const recX = rec as SmallDetailDto
      return recX.birth_date?.split('T')[0]
    },
    gender: (rec: unknown): unknown => {
      const recX = rec as SmallDetailDto
      if (typeof recX?.gender_code !== 'number' && recX?.gender_code !== '') {
        return 'Tidak Diketahui'
      }
      return recX.gender_code
    },
    education: (rec: unknown): unknown => {
      const recX = rec as SmallDetailDto
      if (typeof recX.education_code == 'number' && recX.education_code >= 0) {
        return recX.education_code
      } else if (typeof recX.education_code) {
        return recX.education_code
      }
      return '-'
    },
  },

  components: {
    action(rec, idx) {
      const res: RecComponent = {
        idx,
        rec: rec as object,
        component: action,
      }
      return res
    },
    status(rec, idx) {
      const recX = rec as SmallDetailDto
      if (recX.status_code === null) {
        recX.status_code = 0
      }
      const res: RecComponent = {
        idx,
        rec: rec as object,
        component: statusBadge,
      }
      return res
    },
  },

  htmls: {
    patient_address(_rec) {
      return '-'
    },
  },
}
