from sqlalchemy import Column, Integer, String, Text, Enum, Date, ForeignKey, Boolean
from sqlalchemy.orm import relationship
from app.db.base import Base, TimestampMixin
import enum


class ProjectStatus(str, enum.Enum):
    aktif = "aktif"
    beklemede = "beklemede"
    tamamlandi = "tamamlandi"
    iptal = "iptal"


class Project(Base, TimestampMixin):
    __tablename__ = "projects"

    id = Column(Integer, primary_key=True, index=True)
    user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)

    name = Column(String(255), nullable=False)
    description = Column(Text, nullable=True)
    status = Column(Enum(ProjectStatus), default=ProjectStatus.aktif, nullable=False, index=True)
    progress_pct = Column(Integer, default=0, nullable=False)  # 0-100
    start_date = Column(Date, nullable=True)
    end_date = Column(Date, nullable=True)
    color = Column(String(7), default="#3B82F6", nullable=True)  # HEX renk kodu
    is_deleted = Column(Boolean, default=False, nullable=False)

    # İlişkiler
    user = relationship("User", back_populates="projects")
    tasks = relationship("Task", back_populates="project", cascade="all, delete-orphan")
    calendar_events = relationship("CalendarEvent", back_populates="project")

    def __repr__(self):
        return f"<Project id={self.id} name={self.name} progress={self.progress_pct}%>"
