import uuid
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, DateTime, Text
from sqlalchemy.orm import relationship
from utils.utils import Base, utc_now


class Checklist(Base):
    __tablename__ = "checklists"

    id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
    job_id = Column(String(36), ForeignKey("jobs.id", ondelete="CASCADE"), nullable=False, index=True)
    title = Column(String(500), nullable=False)
    description = Column(Text, nullable=True)
    display_order = Column(Integer, nullable=False, default=0)
    created_at = Column(DateTime(timezone=True), default=utc_now, nullable=False)
    updated_at = Column(DateTime(timezone=True), default=utc_now, onupdate=utc_now, nullable=False)

    job = relationship("Job", back_populates="checklists")
    checklist_items = relationship("ChecklistItem", back_populates="checklist", cascade="all, delete-orphan", passive_deletes=True)


class ChecklistItem(Base):
    __tablename__ = "checklist_items"

    id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
    checklist_id = Column(String(36), ForeignKey("checklists.id", ondelete="CASCADE"), nullable=False, index=True)
    description = Column(Text, nullable=False)
    is_completed = Column(Boolean, nullable=False, default=False)
    assigned_to_user_id = Column(String(36), ForeignKey("users.id", ondelete="SET NULL"), nullable=True, index=True)
    display_order = Column(Integer, nullable=False, default=0)
    completed_at = Column(DateTime(timezone=True), nullable=True)
    created_at = Column(DateTime(timezone=True), default=utc_now, nullable=False)
    updated_at = Column(DateTime(timezone=True), default=utc_now, onupdate=utc_now, nullable=False)

    checklist = relationship("Checklist", back_populates="checklist_items")
    assigned_to_user = relationship("User", back_populates="assigned_checklist_items")