import type { DeathCause } from "./death-cause"
import { type Doctor, genDoctor } from "./doctor"
import { genEmployee, type Employee } from "./employee"
import type { EncounterDocument } from "./encounter-document"
import type { InternalReference } from "./internal-reference"
import type { Nurse } from "./nurse"
import { type Patient, genPatient } from "./patient"
import type { Specialist } from "./specialist"
import type { Subspecialist } from "./subspecialist"
import { genUnit, type Unit } from "./unit"

export interface Encounter {
    id: number
    patient_id: number
    patient: Patient
    registeredAt: string
    class_code: string
    unit_code: string
    unit: Unit
    specialist_code?: string
    specilist?: Specialist
    subspecialist_code?: string
    subspecialist?: Subspecialist
    visitDate: string
    adm_employee_id: number
    adm_employee: Employee
    responsible_nurse_code?: string
    responsible_nurse?: Nurse
    appointment_doctor_code: string
    appointment_doctor: Doctor
    responsible_doctor_code?: string
    responsible_doctor?: Doctor
    refSource_name?: string
    appointment_id?: number
    earlyEducation?: string
    medicalDischargeEducation: string
    admDischargeEducation?: string
    discharge_method_code?: string
    discharge_reason?: string
    discharge_date?: string
    internalReferences?: InternalReference[]
    deathCause?: DeathCause
    paymentMethod_code?: string
    status_code: string
    encounterDocuments: EncounterDocument[]
}

export function genEncounter(): Encounter {
    return {
        id: 0,
        patient_id: 0,
        patient: genPatient(),
        registeredAt: '',
        class_code: '',
        unit_code: '',
        unit: genUnit(),
        visitDate: '',
        adm_employee_id: 0,
        adm_employee: genEmployee(),
        appointment_doctor_code: '',
        appointment_doctor: genDoctor(),
        medicalDischargeEducation: '',
        status_code: '',
        encounterDocuments: [],
    }
}

export interface EncounterCheckInDto {
    responsible_doctor_id: number
    responsibleArea_employee_id: number
}
