// ENUMS
export enum ChwSiteType {
    Facility = "facility",
    Community = "community"
}

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

export enum DiagnosisQuestionnaireType {
    Phq4 = "phq_4",
    CageAid = "cage_aid",
    SuicidalIdeation = "suicidal_ideation",
    SubstanceAbuse = "substance_abuse",
    Phq9 = "phq_9",
    Gad7 = "gad_7",
    Pregnancy = "pregnancy",
    Diabetes = "diabetes",
    Hypertension = "hypertension",
    MentalHealth = "mental_health",
    MaternalHealth = "maternal_health",
    Other = "other"
}

export enum DiagnosisSymptomType {
    SubstanceUseDisorder = "substance_use_disorder",
    Pregnancy = "pregnancy",
    Diabetes = "diabetes",
    Hypertension = "hypertension",
    MentalHealth = "mental_health",
    Other = "other"
}

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


export enum MaternalOutcomeType {
    AliveWell = "alive_well",
    MaternalDeath = "maternal_death",
    Other = "other"
}

export enum NeonatalOutcomeType {
    StillBirth = "still_birth",
    LiveBirth = "live_birth",
    NeonatalDeath = "neonatal_death",
    Other = "other"
}


export enum PatientStatusValueType {
    N_A = "n_a",
    NewPatient = "new_patient",
    KnownPatient = "known_patient",
    Other = "other"
}

export enum QuestionType {
    OpenEnded = "open_ended",
    ClosedEnded = "closed_ended",
    Nominal = "nominal",
    LikertScale = "likert_scale",
    RatingScale = "rating_scale",
    YesNo = "yes_no",
    Interview = "interview",
    Other = "other"
}


export enum PregnancyDetailItemType {
    Diabetes = "diabetes",
    Hypertension = "hypertension",
    AncStarted = "anc_started",
    FollowupInterest = "followup_interest",
    IptDrugs = "ipt_drugs",
    Supplements = "supplements",
    MosquitoNet = "mosquito_net",
    GestationalAge = "gestational_age",
    EstimatedDeliveryDate = "estimated_delivery_date",
    Other = "other"
}
export enum ChwItemAction {
    View = "view",
    Add = "add",
    Update = "update",
    Remove = "remove",
    Done = "done"
}

export enum TreatmentFrequency {
    Daily = "daily",
    Days = "days",
    Weeks = "weeks",
    Months = "months"
}

export enum TreatmentType {
    MedicalReview = "medical_review",
    BloodPressure = "blood_pressure",
    BloodGlucose = "blood_glucose",
    HbA1c = "HbA1c",
    cho = "cho",
    Other = "other",
}

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

export enum ReviewSummaryItem {
    ChiefComplaints = "chief_complaints",
    PhysicalExaminations = "physical_examinations",
    Comorbidities = "comorbidities",
    Complications = "complications",
    ObstetricExamination = "obstetric_examination",
    SystemicExamination = "systemic_examination",
    Other = "other",
}

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

export enum ChwModuleType {
    Screening = "screening",
    Assessment = "assessment",
    Enrolment = "enrolment",
    MedicalReview = "medical_review",
    MyPatients = "my_patients",
    Prescription = "prescription",
    LifestyleMgmt = "lifestyle_mgmt",
    PsychologicalMgmt = "psychological_mgmt",
    CounselingMgmt = "counseling_mgmt",
    Investigation = "investigation",
    TreatmentPlan = "treatment_plan",
    Transfers = "transfers",
    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"
}

// Item Objects

export interface DiagnosisItem {
    type: DiagnosisType,
    value: any,
    unit: string,
    remarks?: string,
    diagnosis_date?: number
}

export interface DiagnosisSymptomItem {
    type: DiagnosisSymptomType,
    symptoms: Array<string>,
    remarks: string
}

export interface DiagnosisQuestionnaireObject {
    type: DiagnosisQuestionnaireType,
    symptoms: Array<DiagnosisQuestionItem>,
    instructions: string
}

export interface DiagnosisQuestionItem {
    type: QuestionType,
    question: string,
    reply: string,
    score?: number,
    remarks?: string
}

export interface PatientStatusItem {
    type: DiagnosisSymptomType,
    value: PatientStatusValueType,
    diagnosis_year: string,
    diagnosis_type: string,
    is_confirmed: boolean,
    remarks?: string
}

export interface TreatmentPlanItem {
    type: TreatmentType,
    value: number,
    frequency: TreatmentFrequency,
    action: ChwItemAction,
    is_approved: boolean,
    remarks: string
}

export interface InvestigationItem {
    name: string,
    test_value: string,
    test_unit: string,
    ordered_date: number,
    tested_date: number,
    action: ChwItemAction,
    remarks: string
}

export interface PrescriptionItem {
    id: string,
    name: string,
    dosage_value: any,
    dosage_unit: string,
    type: PrescriptionItemType,
    frequency: PrescriptionItemFrequency,
    prescribed_days: number,
    action: ChwItemAction,
    remarks?: string
}

export interface CounselingPlanItem {
    name: string,
    action: ChwItemAction,
    clinician_notes?: string,
    assessment_remarks?: string,
    counselor_notes?: string,
    referral_date?: number,
    assessment_date?: number,
    referred_by?: string,
    assessed_by?: string,
    remarks?: string
}

export interface MedicalReviewObject {
    id: string,
    diagnosis_results_list: Array<DiagnosisItem>,
    patient_status_list: Array<PatientStatusItem>,
    clinical_notes: string,
    review_summary_list: Array<MedicalReviewSummaryObject>,
    next_medical_review: number,
    pregnancy_details: PregnancyDetailObject,
    lifestyle_assessment_list: Array<DiagnosisQuestionItem>,
    remarks?: string
}

export interface MedicalReviewSummaryObject {
    type: ReviewSummaryItem,
    values: Array<string>
    remarks?: string
}

export interface MedicationAdherenceObject {
    medication_adherence: string,
    lack_adherence_reason: string
}


export interface PregnancyDetailObject {
    pregnancy_status: boolean,
    last_menstrual_period: number
    high_risk: boolean
    gravida: number
    parity: number
    n_fetus: number
    neonatal_outcome: NeonatalOutcomeType
    maternal_outcome: MaternalOutcomeType
    pregnancy_details_list: Array<PregnancyDetailItem>
}

export interface PregnancyDetailItem {
    type: PregnancyDetailItemType,
    value: any
    observation_date: number
}



// EVENT PROPERTIES

export interface ChwModelObject {
    type: ChwModuleType
}

export interface SubmitScreeningEventObject {
    patient_id: string,
    site_id: string,
    category: ChwSiteType,
    type: ScreeningType,
    referred_for_assessment: boolean,
    vitals_list: Array<DiagnosisItem>,
    diagnosis_symptoms_list: Array<DiagnosisSymptomItem>,
    diagnosis_questionnaire_list: Array<DiagnosisQuestionnaireObject>,
    diagnosis_values_list: Array<DiagnosisItem>,
    diagnosis_results_list: Array<DiagnosisItem>
    pregnancy_details: PregnancyDetailObject
}

export interface SubmitAssessmentEventObject {
    patient_id: string,
    site_id: string,
    category: ChwSiteType,
    type: ScreeningType,
    medication_adherence: MedicationAdherenceObject,
    vitals_list: Array<DiagnosisItem>,
    diagnosis_questionnaire_list?: Array<DiagnosisQuestionnaireObject>,
    diagnosis_values_list: Array<DiagnosisItem>,
    diagnosis_results_list: Array<DiagnosisItem>,
    diagnosis_symptoms_list: Array<DiagnosisSymptomItem>,
    pregnancy_details?: PregnancyDetailObject,
    referred_for_assessment: boolean
}

export interface SubmitEnrolmentEventObject {
    patient_id: string,
    site_id: string,
    action: ChwItemAction,
    vitals_list: Array<DiagnosisItem>,
    diagnosis_values_list: Array<DiagnosisItem>,
    diagnosis_results_list: Array<DiagnosisItem>,
    patient_status_list: Array<PatientStatusItem>,
    diagnosis_questionnaire_list?: Array<DiagnosisQuestionnaireObject>,
    pregnancy_details?: PregnancyDetailObject,
    treatment_plan_list: Array<TreatmentPlanItem>
}

export interface CounselingEventObject {
    patient_id: string,
    site_id: string,
    id: string,
    counseling_type: CounselingType
    counseling_plan_list: Array<CounselingPlanItem>,
}

export interface InvestigationEventObject {
    patient_id: string,
    site_id: string,
    id: string,
    prescribed_tests_list: Array<InvestigationItem>,
}

export interface TreatmentPlanEventObject {
    patient_id: string,
    site_id: string,
    id: string,
    treatment_plan_list: Array<TreatmentPlanItem>,
}

export interface PrescriptionEventObject {
    patient_id: string,
    site_id: string,
    id: string,
    prescription_list: Array<PrescriptionItem>,
}

export interface SubmitMedicalReviewObject {
    patient_id: string,
    site_id: string,
    medical_review: MedicalReviewObject
}


// CATALOG VALUES

export interface ChwCatalogModel {
    name : string,
    role : string,
    is_volunteer : boolean,
    role_permissions :  Array<string>,
    site_id_list : Array<string>,
    services : Array<string>
}

export interface ChwSiteCatalogModel {
    name : string,
    country : string,
    region_state : string,
    city : string,
    zipcode : string,
    level : string,
    category : string,
    is_active : boolean,
    address : string,
    address_type : string,
    latitude? : number,
    longitude? : number,
    culture : string
}

export interface PatientCatalogModel {
    name : string,
    country : string,
    region_state : string,
    city : string,
    profession : string,
    education_level : string,
    site_ids_list : Array<string>,
    national_id : string,
    insurance_id : string,
    insurance_type : string,
    insurance_status : boolean,
    landmark : string,
    phone_number_category : string,
    program_id : string
}