from django import forms

class PatientFilterForm(forms.Form):
    # Demographics
    sex = forms.MultipleChoiceField(
        choices=[('male', 'Male'), ('female', 'Female')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    age_min = forms.IntegerField(required=False, label="Min Age")
    age_max = forms.IntegerField(required=False, label="Max Age")
    age_interval = forms.IntegerField(required=False, label="Age Interval")
    occupation = forms.MultipleChoiceField(
        choices=[
            ('housewife', 'Housewife'),
            ('teacher', 'Teacher'),
            ('business', 'Business'),
            ('others', 'Others')
        ],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )

    # Physical Measurements
    height_min = forms.FloatField(required=False, label="Min Height (m)")
    height_max = forms.FloatField(required=False, label="Max Height (m)")
    weight_min = forms.FloatField(required=False, label="Min Weight (kg)")
    weight_max = forms.FloatField(required=False, label="Max Weight (kg)")
    bmi_min = forms.FloatField(required=False, label="Min BMI")
    bmi_max = forms.FloatField(required=False, label="Max BMI")
    waist_circum_min = forms.FloatField(required=False, label="Min Waist Circumference (cm)")
    waist_circum_max = forms.FloatField(required=False, label="Max Waist Circumference (cm)")
    hip_circum_min = forms.FloatField(required=False, label="Min Hip Circumference (cm)")
    hip_circum_max = forms.FloatField(required=False, label="Max Hip Circumference (cm)")
    whr_min = forms.FloatField(required=False, label="Min WHR")
    whr_max = forms.FloatField(required=False, label="Max WHR")

    # Vital Signs
    bp_sys_min = forms.IntegerField(required=False, label="Min Systolic BP")
    bp_sys_max = forms.IntegerField(required=False, label="Max Systolic BP")
    bp_dia_min = forms.IntegerField(required=False, label="Min Diastolic BP")
    bp_dia_max = forms.IntegerField(required=False, label="Max Diastolic BP")

    # Blood and Health Metrics
    rbs_min = forms.FloatField(required=False, label="Min Random Blood Sugar")
    rbs_max = forms.FloatField(required=False, label="Max Random Blood Sugar")
    hba1c_min = forms.FloatField(required=False, label="Min HbA1c")
    hba1c_max = forms.FloatField(required=False, label="Max HbA1c")
    tg_min = forms.FloatField(required=False, label="Min Triglycerides")
    tg_max = forms.FloatField(required=False, label="Max Triglycerides")
    hdl_min = forms.FloatField(required=False, label="Min HDL")
    hdl_max = forms.FloatField(required=False, label="Max HDL")
    ldl_min = forms.FloatField(required=False, label="Min LDL")
    ldl_max = forms.FloatField(required=False, label="Max LDL")
    tc_min = forms.FloatField(required=False, label="Min Total Cholesterol")
    tc_max = forms.FloatField(required=False, label="Max Total Cholesterol")
    tg_hdl_min = forms.FloatField(required=False, label="Min TG/HDL Ratio")
    tg_hdl_max = forms.FloatField(required=False, label="Max TG/HDL Ratio")
    ldl_hdl_min = forms.FloatField(required=False, label="Min LDL/HDL Ratio")
    ldl_hdl_max = forms.FloatField(required=False, label="Max LDL/HDL Ratio")
    tc_hdl_min = forms.FloatField(required=False, label="Min TC/HDL Ratio")
    tc_hdl_max = forms.FloatField(required=False, label="Max TC/HDL Ratio")
    creatinine_min = forms.FloatField(required=False, label="Min Creatinine")
    creatinine_max = forms.FloatField(required=False, label="Max Creatinine")

    # Nutrition and Diet
    carbohydrate = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    protein = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    fats_source = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    vegetable = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    fruits = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    vitamins = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    minerals = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    water_min = forms.FloatField(required=False, label="Min Water Intake (g/day)")
    water_max = forms.FloatField(required=False, label="Max Water Intake (g/day)")

    # Lifestyle
    tea = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    coffee = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    betal_nuts = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    jarda = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    processed_food = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    fast_food = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    soft_drinks = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    walking_hours_min = forms.FloatField(required=False, label="Min Walking Hours")
    walking_hours_max = forms.FloatField(required=False, label="Max Walking Hours")
    standing_hours_min = forms.FloatField(required=False, label="Min Standing Hours")
    standing_hours_max = forms.FloatField(required=False, label="Max Standing Hours")
    desk_job = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    shift_d_n = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    regular_exercise = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )

    # Health Symptoms
    feeling_restless = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    fatigue = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    shortness_of_breath = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    sleeping_hours_min = forms.FloatField(required=False, label="Min Sleeping Hours")
    sleeping_hours_max = forms.FloatField(required=False, label="Max Sleeping Hours")
    sound_sleep = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )

    # Medical History
    family_history_with_cancer = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    thyroidism_problem = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    gastric = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    antibiotic_intake = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    diabetes = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )

    # Reproductive Health
    menarche_min = forms.IntegerField(required=False, label="Min Menarche Age")
    menarche_max = forms.IntegerField(required=False, label="Max Menarche Age")
    menstrual_status = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    menopause_min = forms.IntegerField(required=False, label="Min Menopause Age")
    menopause_max = forms.IntegerField(required=False, label="Max Menopause Age")
    parity_min = forms.IntegerField(required=False, label="Min Parity")
    parity_max = forms.IntegerField(required=False, label="Max Parity")
    age_at_first_birth_min = forms.IntegerField(required=False, label="Min Age at First Birth")
    age_at_first_birth_max = forms.IntegerField(required=False, label="Max Age at First Birth")
    lactation_situation = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )
    breastfeeding_duration_min = forms.FloatField(required=False, label="Min Breastfeeding Duration (months)")
    breastfeeding_duration_max = forms.FloatField(required=False, label="Max Breastfeeding Duration (months)")
    use_contraceptive = forms.MultipleChoiceField(
        choices=[('yes', 'Yes')],
        widget=forms.CheckboxSelectMultiple,
        required=False
    )

