from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, Boolean
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.database import Base

class ShiftSwap(Base):
    __tablename__ = "shift_swaps"
    id = Column(Integer, primary_key=True, index=True)
    requester_id = Column(Integer, ForeignKey("asim.id"), nullable=True)
    offer_schedule_id = Column(Integer, ForeignKey("mass_schedules.id"), nullable=False)
    offer_position_number = Column(String(10), nullable=False)
    want_schedule_ids = Column(Text, nullable=True)
    want_schedule_id = Column(Integer, ForeignKey("mass_schedules.id"), nullable=True)
    want_position_number = Column(String(10), nullable=True)
    taker_schedule_id = Column(Integer, ForeignKey("mass_schedules.id"), nullable=True)
    taker_position_number = Column(String(10), nullable=True)
    swap_type = Column(String(10), default='weekly')
    request_type = Column(String(10), default='swap')  # 'swap' | 'replace'
    posted_by_admin = Column(Boolean, default=False)
    status = Column(String(20), default='open')
    taker_id = Column(Integer, ForeignKey("asim.id"), nullable=True)
    rejection_reason = Column(String, nullable=True)
    created_at = Column(DateTime(timezone=True), server_default=func.now())
    completed_at = Column(DateTime(timezone=True), nullable=True)
    requester = relationship("Asim", foreign_keys=[requester_id])
    taker = relationship("Asim", foreign_keys=[taker_id])
    offer_schedule = relationship("MassSchedule", foreign_keys=[offer_schedule_id])
    taker_schedule = relationship("MassSchedule", foreign_keys=[taker_schedule_id])