from datetime import date

from sqlalchemy import Column, Integer, String, Boolean, Date, ForeignKey, Text, Double, Float
from sqlalchemy.orm import relationship

from models.base import Base, TimestampMixin

class Parent(Base, TimestampMixin):
    __tablename__ = 'parents'
    id = Column(Integer, primary_key=True, autoincrement=True)
    first_name = Column(String(255), nullable=False)
    last_name = Column(String(255), nullable=False)
    email = Column(String(255), unique=True, nullable=False)
    hashed_password = Column(String(255), nullable=False)
    user_type = Column(String(50), nullable=False)
    country_code = Column(String(5), nullable=True)
    mobile_number = Column(String(20), nullable=False)
    relation=Column(String(255),nullable=True)
    sur_name = Column(String(255), nullable=True)
    middle_name = Column(String(255), nullable=True)
    dob = Column(Date, nullable=True)
    address = Column(String(255), nullable=True)
    post_code = Column(String(255), nullable=True)
    local_authority = Column(String(255), nullable=True)
    gender = Column(String(50), nullable=True)

    alternative_contact_name = Column(String(255), nullable=True)
    alternative_contact_email = Column(String(255), nullable=True)
    alternative_contact_number=Column(String(255),nullable=True)
    alternative_contact_relationship=Column(String(255),nullable=True)


    profile_image = Column(Text, nullable=True)
    how_did_you_know = Column(String(255), nullable=True)
    email_consent = Column(Boolean, nullable=True, default=False)
    terms_and_conditions_consent = Column(Boolean, nullable=True, default=False)
    code_of_consent_availability = Column(Boolean, nullable=True, default=False)

    wallet_amount=Column(Float,default=0)

    participants = relationship("Participant")

    @property
    def participant_count(self):

        return len(self.participants)

    @property
    def full_name(self):
        return f"{self.first_name} {self.sur_name}"

    @property
    def age(self):
        if self.dob:
            today = date.today()
            age = today.year - self.dob.year - ((today.month, today.day) < (self.dob.month, self.dob.day))
            return age
        else:
            return 0


    @property
    def profile_image_url(self):
        return f"/images/{self.profile_image}"
