"""
SQLAlchemy ORM Models
"""
from sqlalchemy import Column, Integer, String, Float, DateTime, Text, Boolean, ForeignKey
from sqlalchemy.orm import relationship

# Import Base from services.database
from ..services.database import Base
from ..utils import utcnow


# ── User ────────────────────────────────────────────────────
class User(Base):
    __tablename__ = "users"

    id              = Column(Integer, primary_key=True, index=True)
    full_name       = Column(String(100), nullable=False)
    email           = Column(String(255), unique=True, index=True, nullable=False)
    hashed_password = Column(String(255), nullable=False)   # fixed: was 'password'
    role            = Column(String(50), default="client")
    city            = Column(String(100), nullable=True)
    is_active       = Column(Boolean, default=True)          # added: was missing
    created_at      = Column(DateTime, default=utcnow)

    cases        = relationship("Case", back_populates="client")
    appointments = relationship("Appointment", back_populates="client",
                                foreign_keys="Appointment.client_id")


# ── Case ────────────────────────────────────────────────────
class Case(Base):
    __tablename__ = "cases"

    id            = Column(Integer, primary_key=True, index=True)
    client_id     = Column(Integer, ForeignKey("users.id"), nullable=False)
    description   = Column(Text, nullable=False)
    category      = Column(String(100), nullable=True)
    summary       = Column(Text, nullable=True)
    legal_guidance= Column(Text, nullable=True)
    status        = Column(String(50), default="pending")
    created_at    = Column(DateTime, default=utcnow)

    client       = relationship("User", back_populates="cases")
    appointments = relationship("Appointment", back_populates="case")


# ── Lawyer ──────────────────────────────────────────────────
class Lawyer(Base):
    __tablename__ = "lawyers"

    id                      = Column(Integer, primary_key=True, index=True)
    name                    = Column(String(100), nullable=False)
    gender                  = Column(String(20))
    city                    = Column(String(100))
    specialization          = Column(String(100))
    experience_years        = Column(Integer)
    consultation_fee_pkr    = Column(Float)
    rating                  = Column(Float)
    total_cases_handled     = Column(Integer)
    success_rate_percentage = Column(Float)
    law_firm_name           = Column(String(150))
    contact_email           = Column(String(255))

    appointments = relationship("Appointment", back_populates="lawyer")


# ── Appointment ─────────────────────────────────────────────
class Appointment(Base):
    __tablename__ = "appointments"

    id               = Column(Integer, primary_key=True, index=True)
    client_id        = Column(Integer, ForeignKey("users.id"), nullable=False)
    lawyer_id        = Column(Integer, ForeignKey("lawyers.id"), nullable=False)
    case_id          = Column(Integer, ForeignKey("cases.id"), nullable=True)
    appointment_date = Column(String(20))
    appointment_time = Column(String(20))
    status           = Column(String(50), default="pending")
    notes            = Column(Text, nullable=True)
    created_at       = Column(DateTime, default=utcnow)

    client = relationship("User", back_populates="appointments",
                          foreign_keys=[client_id])
    lawyer = relationship("Lawyer", back_populates="appointments")
    case   = relationship("Case", back_populates="appointments")
