import {Language, AddressObject, DiagnosisQuestionItem} from "../../core/commonTypes";

export enum EmergencyMgmtEventType {
    Incident = "incident",
    Ambulance = "ambulance"
}

export enum EmergencyMgmtCatalogType {
    ERO = "user_ero",
    Ambulance = "ambulance"
}

export enum EmergencyMgmtItemAction {
    View = "view",
    Add = "add",
    Update = "update",
    Remove = "remove",
    Start = "start",
    End = "end",
    Pause = "pause",
    Resume = "resume",

    Attend = "attend",
    Decline = "decline",
    Terminate = "terminate",
    Transfer = "transfer",
    Skip = "skip",

    Dispatch = "dispatch",
    Denial = "denial",

    Other = "other"

}

export enum IncidentType {
    Emergency = "emergency",
    Grievance = "grievance",
    NonEmergency = "non_emergency",
    Transfer = "transfer",
    FollowUp = "follow_up",
    ServiceOffering = "service_offering",
    CustomerSupport = "customer_support",
    Other = "other",
}

export enum AmbulanceStatus {
    Available = "available",
    Busy = "busy",
    Maintenance = "maintenance",
    Other = "other",
}

export interface IncidentDetailItem {
    id: string,
    contact_id?: string,
    type: IncidentType,
    sub_type?: string,
    category?: string[],
    language?: Language,
    is_duplicate_incident?: boolean,
    is_sms_set_location?: boolean,
    severity?: string,
    chief_complaints_list?: ChiefComplaintItem[],
}

export interface ChiefComplaintItem {
    complaint: string,
    questions_list?: DiagnosisQuestionItem[],
}

export interface EmergencyPatientItem {
    id: string,
    age?: number,
    blood_group?: string,
    gender?: string,
}

export interface AmbulanceItem {
    id: string,
    driver_id: string,
    emso_id?: string,
    type: string,
    distance_from_incident?: number,
    status: AmbulanceStatus,
    eta?: number,
    gps_datetime?: string,
    location?: AddressObject,
}

export interface IncidentProperties {
    action: EmergencyMgmtItemAction,
    details: IncidentDetailItem,
    patient_list?: EmergencyPatientItem[],
    address?: AddressObject,
    facility_id?: string,
    ambulance_list?: AmbulanceItem[],
    schedule_time?: number,
    status?: string,
    resolution?: string,
    summary?: string,
    remarks?: string,
    meta?: any
}

export interface AmbulanceProperties {
    incident_id?: string,
    contact_id?: string,
    action: EmergencyMgmtItemAction,
    ambulance: AmbulanceItem,
    pickup_address?: AddressObject,
    destination_address?: AddressObject,
    denial_details?: DenialDetailItem,
    meta?: any
}

export interface DenialDetailItem {
    author?: string,
    reason: string,
    remarks?: string
}

export interface EROCatalog {
    id: string
    joining_date?: string,
    status: string,
    employee_type?: string,
    zone?: string,
    site_id_list?: string[],
    supervisor_id_list?: string[]
}

export interface AmbulanceCatalog {
    id: string
    type: string,
    base_site_id?: string,
    base_site_name?: string,
    base_site_district?: string,
}
