from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship

from database import Base


class Patient(Base):
    __tablename__ = "patients"

    id = Column(Integer, primary_key=True, index=True, autoincrement=True)

    # the doctor who added / is treating this patient
    doctor_id = Column(
        Integer,
        ForeignKey("doctors.id", ondelete="CASCADE"),
        nullable=False,
        index=True,
    )

    # ----- basic details -----
    full_name = Column(String(100), nullable=False)
    father_husband_name = Column(String(100), nullable=True)
    age = Column(Integer, nullable=True)
    gender = Column(String(20), nullable=True)
    marital_status = Column(String(30), nullable=True)
    mobile_number = Column(String(15), nullable=True)
    address = Column(String(255), nullable=True)

    created_at = Column(DateTime(timezone=True), server_default=func.now())

    doctor = relationship("Doctor")
    measurements = relationship(
        "Measurement",
        back_populates="patient",
        cascade="all, delete-orphan",
        order_by="desc(Measurement.created_at)",
    )
