"""Waitlist model for storing waitlist submissions."""

from datetime import datetime
from uuid import uuid4

from sqlalchemy import Boolean, Column, Date, DateTime, Integer, String, ForeignKey
from sqlalchemy.dialects.postgresql import UUID

from app.database import Base


class Waitlist(Base):
    __tablename__ = "waitlist"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4, index=True)
    
    # Personal Information (varchar 1000 to capture full values)
    full_name = Column(String(1000), nullable=False)
    gender = Column(String(1000), nullable=False)
    email = Column(String(255), nullable=False, index=True)
    phone = Column(String(1000), nullable=False, index=True)
    whatsapp_phone = Column(String(1000), nullable=True)
    date_of_birth = Column(Date, nullable=False)
    age = Column(String(1000), nullable=True)
    
    # Location
    state = Column(String(1000), nullable=False)
    lga = Column(String(1000), nullable=False)
    
    # Academic
    qualification = Column(String(1000), nullable=False)
    
    # Source tracking
    source = Column(String(1000), nullable=True, index=True)  # 'personal', 'corporate', 'edu'
    source_name = Column(String(1000), nullable=True)  # company_name or institution_name
    source_id = Column(UUID(as_uuid=True), nullable=True, index=True)  # partner.id
    
    # Engagement Tracking
    invitation_sent = Column(Boolean, default=False, nullable=False)
    invitation_sent_at = Column(DateTime, nullable=True)
    followup_count = Column(Integer, default=0, nullable=False)
    last_followup_at = Column(DateTime, nullable=True)
    has_applied = Column(Boolean, default=False, nullable=False)
    application_id = Column(UUID(as_uuid=True), nullable=True)
    status = Column(String(1000), default='waiting', nullable=False)  # waiting, invited, engaged, converted
    
    # Timestamps
    created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)

    def __repr__(self):
        return f"<Waitlist {self.email}: {self.full_name}>"
