import {Country} from "../../core/commonTypes";

// ENUMS
export enum PatientMgmtEventType {
    Patient = "patient",
    Encounter = "encounter",
    Appointment = "appointment",
    Diagnosis = "diagnosis",
    Other = "other",
}

export enum PatientMgmtCatalogType {
    UserHcw = "user_chw",
    Patient = "patient"
}

export enum HcwSiteCategory {
    Facility = "facility",
    Community = "community",
    PatientAddress = "patient_address",
    Virtual = "virtual",
    Other = "other"
}

export enum AppointmentFollowupType {
    PhoneCall = "phone_call",
    SMS = "sms",
    WhatsApp = "whatsapp",
    HouseVisit = "house_visit",
    Other = "other"
}

export enum AppointmentStatus {
    Upcoming = "upcoming",
    Missed = "missed",
    Attended = "attended",
    Other = "other"
}

export enum CounselingType {
    Lifestyle = "lifestyle",
    Psychological = "psychological",
    Other = "other"
}

export enum DiagnosisCategory {
    Computed = "computed",
    Given = "given",
    Other = "other"
}

export enum DiagnosisQuestionnaireCategory {
    MedicalReview = "medical_review",
    Assessment = "assessment",
    Diagnostic = "diagnostic",
    Other = "other"
}

export enum DiagnosisQuestionnaireOutcomeType {
    RiskStatus = "risk_status",
    RiskScore = "risk_score",
    Other = "other"
}

export enum DiagnosisStatusValueType {
    Positive= "positive",
    Negative= "negative",
    Recovered= "recovered",
    Unknown= "unknown",
    NA = "n_a",
    Other = "other"
}

export enum DiagnosisStatusRiskType {
    Low = "low",
    High = "high",
    Unknown = "unknown",
    NA = "n_a",
    Other = "other"
}

export enum DiagnosisSubType {
    Age = "age",
    Gender = "gender",
    Height = "height",
    Weight = "weight",
    Smoker = "smoker",
    BloodPressure = "blood_pressure",
    BloodPressureSystolic = "blood_pressure_systolic",
    BloodPressureDiastolic = "blood_pressure_diastolic",
    MUAC = "muac",
    BloodGlucose = "blood_glucose",
    HbA1c = "hbA1c",
    Temperature = "temperature",
    Bmi = "bmi",
    Cvd = "cvd",
    Phq4 = "phq_4",
    Phq9 = "phq_9",
    Gad7 = "gad_7",
    PregnancyStatus = "pregnancy_status",
    PregnancyDangerSigns = "pregnancy_danger_signs",
    SuicidalIdeation = "suicidal_ideation",
    HighRiskPregnancy = "high_risk_pregnancy",
    Other = "other"
}

export enum DiagnosisSymptomType {
    Bio = "bio",
    HIV = "hiv",
    NCD = "ncd",
    TB = "tb",
    ECD = "ecd",
    Diabetes = "diabetes",
    Hypertension = "hypertension",
    Pregnancy = "pregnancy",
    MentalHealth = "mental_health",
    SubstanceUseDisorder = "substance_use_disorder",
    AdolescentHealth = "adolescent_health",
    GeneralScreening = "general_screening",
    Gynecologic = "gynecologic",
    Antenatal = "antenatal",
    Postnatal = "postnatal",
    CervicalCancer = "cervical_cancer",
    Lifestyle = "lifestyle",
    Psychological = "psychological",
    GenderBasedViolence = "gender_based_violence",
    SexualBehaviour = "sexual_behaviour",
    EconomicStrength = "economic_strengthening",
    Other = "other",
}

export enum DiagnosisType {
    Bio = "bio",
    HIV = "hiv",
    NCD = "ncd",
    TB = "tb",
    ECD = "ecd",
    Diabetes = "diabetes",
    Hypertension = "hypertension",
    Pregnancy = "pregnancy",
    MentalHealth = "mental_health",
    SubstanceUseDisorder = "substance_use_disorder",
    AdolescentHealth = "adolescent_health",
    GeneralScreening = "general_screening",
    Gynecologic = "gynecologic",
    Antenatal = "antenatal",
    Postnatal = "postnatal",
    CervicalCancer = "cervical_cancer",
    Lifestyle = "lifestyle",
    Psychological = "psychological",
    GenderBasedViolence = "gender_based_violence",
    SexualBehaviour = "sexual_behaviour",
    EconomicStrength = "economic_strengthening",
    Other = "other",
}

export enum EncounterType {
    Screening = "screening",
    Assessment = "assessment",
    Enrolment = "enrolment",
    MedicalReview = "medical_review",
    Counseling = "counseling",
    Other = "other"
}

export enum FrequencyType {
    Daily = "daily",
    Days = "days",
    Weeks = "weeks",
    Months = "months",
    Other = "other"
}

export enum HcwItemAction {
    View = "view",
    Add = "add",
    Update = "update",
    Remove = "remove",
    Done = "done",
    Other = "other"
}

export enum PatientType {
    Triage = "triage",
    Outpatient = "outpatient",
    Inpatient = "inpatient",
    Pharmacy = "pharmacy",
    DoorToDoor = "door_to_door",
    Camp = "camp",
    Other = "other"
}

export enum PrescriptionItemFrequency {
    AM = "AM",
    PM = "PM",
    OD = "OD",
    BD = "BD",
    TDS = "TDS",
    QDS = "QDS",
    OM = "OM",
    ON = "ON",
    CC = "CC",
    PC = "PC",
    AC = "AC",
    PRN = "PRN",
    Other = "other"
}

export enum PrescriptionItemFormulationType {
    Tablet = "tablet",
    Capsule = "capsule",
    Syrup = "syrup",
    Injection = "injection",
    Insulin = "insulin",
    Contraceptive = "contraceptive",
    Other = "other"
}

export enum ScheduleItemType {
    MedicalReview = "medical_review",
    Assessment = "assessment",
    Other = "other"
}

export interface PatientProperties {
    patient_id: string;
    site_id: string;
    location: string;
    action: HcwItemAction;
    is_from_gho: boolean;
    type: string;
    sub_type?: string;
    age?: number;
    gender?: string;
    registration_date?: string;
    meta?: any;
}


export interface EncounterProperties {
    encounter_id: string;
    patient_id: string;
    site_id: string;
    location: string;
    action: HcwItemAction;
    category: string;
    type: string;
    sub_type?: string;
    hcw_id_list?: string[];
    appointment_id?: string;
    encounter_time?: string;
    risk?: string;
    meta?: any;
}

export interface DiagnosisProperties {
    name: string;
    encounter_id: string;
    patient_id: string;
    site_id: string;
    location: string;
    action: HcwItemAction;
    category: string;
    type: string;
    sub_type?: string;
    value?: string;
    result?: string;
    meta?: any;
  }

export interface AppointmentProperties {
    appointment_id: string;
    patient_id: string;
    site_id: string;
    location: string;
    status: string;
    category: string;
    type: string;
    sub_type?: string;
    action: HcwItemAction;
    time: string;
    hcw_id_list?: string[];
    is_time_sensitive?: boolean;
    update_reason?: string;
    followup_id?: string;
    followup_type?: string;
    followup_response?: string;
    meta?: any;
}

export interface HcwCatalogModel {
    name?: string,
    role?: string,
    site_id_list?: string[],
    supervisor_id_list?: string[],
    meta?: any
}

export interface PatientCatalogModel {
    country?: Country,
    region_state?: string,
    city?: string,
    profession?: string,
    education_level?: string,
    site_id_list?: string[],
    insurance_id?: string,
    insurance_type?: string,
    insurance_status?: boolean,
    landmark?: string,
    phone_number_category?: string,
    program_id?: string,
    family_id?: string,
    hw_id_list?: string[],
    buddy_id_list?: string[],
    transport_mode?: string,
    marital_status?: string,
    employment_status?: string,
    nationality?: string,
    has_whatsapp?: boolean,
    has_email?: boolean,
    meta?: any
}

