from sqlalchemy import Column, String, Integer, Date, Text, Boolean, Enum, ForeignKey
from models.base import Base, TimestampMixin


class ProfileRegistration(Base,TimestampMixin):
    __tablename__ = "profile_registration"

    id = Column(Integer, primary_key=True, index=True)
    user_id = Column(Integer, nullable=True)
    user_type=Column(String(255),nullable=False)
    course_id = Column(Integer, ForeignKey('course.id'), nullable=True)
    participant_id = Column(Integer, nullable=True)
    file = Column(Text, nullable=True)
    service_programme = Column(String(255), nullable=False)
    participant = Column(String(255), nullable=False)

    first_name = Column(String(120), nullable=False)
    last_name = Column(String(120), nullable=False)
    preferred_name = Column(String(120))
    student_email = Column(String(255), nullable=False)
    student_phone = Column(String(50))
    date_of_birth = Column(Date, nullable=False)
    age = Column(Integer, nullable=False)
    gender = Column(String(50), nullable=False)
    address_line1 = Column(String(255), nullable=False)
    address_line2 = Column(String(255))
    city = Column(String(120))
    state = Column(String(120))
    postcode = Column(String(50))
    bring_121_worker = Column(Boolean, nullable=False, default=False)
    additional_need_description = Column(Text)   
    worker_details = Column(Text)         

    primary_is_responsible = Column(Boolean, nullable=False, default=False)
    primary_first_name = Column(String(120), nullable=False)
    primary_last_name = Column(String(120), nullable=False)
    primary_relationship = Column(String(120), nullable=False)
    primary_address = Column(String(255), nullable=False)
    primary_postcode = Column(String(50))
    primary_email = Column(String(255), nullable=False)
    primary_phone = Column(String(50), nullable=False)

    secondary_first_name = Column(String(120))
    secondary_last_name = Column(String(120))
    secondary_relationship = Column(String(120))
    secondary_address = Column(String(255))
    secondary_postcode = Column(String(50))
    secondary_email = Column(String(255))
    secondary_phone = Column(String(50))
    
    communication_preference_email = Column(Boolean, default=False)
    communication_preference_phone = Column(Boolean, default=False)
    communication_preference_newsletter = Column(Boolean, default=False)
    communication_preference_facebook_group = Column(Boolean, default=False)
    school_name = Column(String(255))
    eligible_free_school_meals = Column(String, default=False)
    ethnicity = Column(String(255), nullable=False)
    religious_background = Column(String(255), nullable=False)
    english_first_language = Column(Boolean, nullable=False)
    other_languages = Column(String(500))
    signing_systems = Column(String(255))  
    adult_speech_understanding = Column(String(255), nullable=False)
    communication_method_speech = Column(Boolean, default=False)
    communication_method_makaton = Column(Boolean, default=False)
    communication_method_vocalisation_sounds = Column(Boolean, default=False)
    communication_method_gestures = Column(Boolean, default=False)
    communication_method_bsl = Column(Boolean, default=False)
    communication_help_notes = Column(Text)


    favourites_and_interests = Column(Text)   
    dislikes = Column(Text)
    emotional_support_triggers = Column(Text)  
    sensitive_to_noise_or_light = Column(String, default=False)
    dietary_requirements = Column(Text)
    help_with_eating_or_drinking = Column(String, default=False)
    gp_practice = Column(String(255), nullable=False)
    gp_name = Column(String(255), nullable=False)
    gp_address_line1 = Column(String(255), nullable=False)
    gp_address_line2 = Column(String(255))
    gp_city = Column(String(120))
    gp_state = Column(String(120))
    gp_postcode = Column(String(50))
    gp_email = Column(String(255))
    gp_phone = Column(String(50))
    
    visual_impairment = Column(Boolean, nullable=False, default=False)
    visual_impairment_details = Column(Text)
    hearing_impairment = Column(Boolean, nullable=False, default=False)
    hearing_impairment_details = Column(Text)
    epilepsy = Column(Boolean, nullable=False, default=False)
    epilepsy_details = Column(Text)  # trigger, frequency, duration, treatment etc.
    mental_health_needs = Column(Boolean, nullable=False, default=False)
    mental_health_details = Column(Text)
    other_info_notes = Column(Text)  # "anything else we should know"
    prn_medication = Column(Boolean, nullable=False, default=False)
    prn_medication_details = Column(Text)
    other_medication = Column(Boolean, nullable=False, default=False)
    other_medication_details = Column(Text)
    other_medical_conditions_allergies = Column(Text)
    
    travel_to_building = Column(String(255), nullable=False)
    comfort_with_new_places_people = Column(String(255), nullable=False)
    mobility_equipment = Column(String(255))  # wheelchair / walker / hoist etc


    care_plan_epilepsy = Column(Boolean, default=False)
    care_plan_manual_handling = Column(Boolean, default=False)
    care_plan_dysphagia = Column(Boolean, default=False)
    care_plan_ehcp = Column(Boolean, default=False)  # Educational Healthcare Plan
    care_plan_positive_behaviour = Column(Boolean, default=False)
    care_plan_diabetes = Column(Boolean, default=False)
    care_plan_other = Column(Boolean, default=False)
    care_plan_other_details = Column(Text)

    
    consent_share_care_plans = Column(Boolean, nullable=False, default=False)
    consent_photo_publicity = Column(Boolean, nullable=False, default=False)
    consent_medical_treatment = Column(Boolean, nullable=False, default=False)
    mailing_list_opt_in = Column(Boolean, nullable=False, default=False)
    gdpr_agreed = Column(Boolean, nullable=False, default=False)
