from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy import Column, String,Integer, Boolean, DateTime, Date 
from sqlalchemy.sql import func
from src.models.base import Base
from src.db.mixins import AuditMixin

class Task(AuditMixin,Base):
    __tablename__ = "proman_task"
    id = Column(Integer, primary_key=True)
    module_id = Column(Integer, ForeignKey('proman_module.id'), nullable=False)
    start_date = Column(Date, nullable=True)
    end_date = Column(Date, nullable=True)
    status = Column(String(20), nullable=False) 
    priority = Column(String(20), nullable=False)     
    title = Column(String(100), nullable=False) 
    description = Column(String(255), nullable=False) 
    is_active = Column(Boolean, default=True)        
    created_at = Column(DateTime(timezone=True), default=func.now())
    updated_at = Column(DateTime(timezone=True), nullable=False, default=func.now(), onupdate=func.now())

    # Define relationship to assigned members
    assigned_members = relationship("TaskAssignedMember", back_populates="task")
    

class TaskAssignedMember(AuditMixin,Base):
    __tablename__ = "proman_task_assigned_member" # Corrected table name
    id = Column(Integer, primary_key=True)
    task_id = Column(Integer, ForeignKey('proman_task.id', ondelete="CASCADE"), nullable=False)
    hrms_user_id = Column(Integer, ForeignKey('hrms_employee_profile.user_id'), nullable=False) 
    is_active = Column(Boolean, default=True)        
    created_at = Column(DateTime(timezone=True), default=func.now())
    updated_at = Column(DateTime(timezone=True), nullable=False, default=func.now(), onupdate=func.now())

    # Define relationship back to the task
    task = relationship("Task", back_populates="assigned_members")    