from utils.db_connect import BaseModelForTable
from sqlalchemy import (
    Column,
    Integer,
    String,
    Text,
    ForeignKey,
    Enum as SQLEnum,
    Index,
    UUID
)
from sqlalchemy.orm import relationship
from enum import Enum


class ProjectStatus(str, Enum):
    ACTIVE = 'ACTIVE'
    INACTIVE = 'INACTIVE'
    ARCHIVED = 'ARCHIVED'


class Project(BaseModelForTable):
    __tablename__ = 'projects'

    org_id = Column(
        UUID(as_uuid=True),
        ForeignKey('organizations.id'),
        nullable=False,
        index=True
    )

    name = Column(String(255), nullable=False)

    description = Column(Text, nullable=True)

    project_key = Column(
        String(255),
        unique=True,
        nullable=False,
        index=True
    )

    ticket_counter = Column(
        Integer,
        default=0,
        nullable=False
    )

    status = Column(
        SQLEnum(ProjectStatus),
        default=ProjectStatus.ACTIVE.value,
        nullable=False,
        index=True
    )

    created_by = Column(
        UUID(as_uuid=True),
        ForeignKey('users.id'),
        nullable=False,
        index=True
    )

    organization = relationship(
        "Organization",
        back_populates="projects"
    )

    creator = relationship(
        "User",
        back_populates="created_projects"
    )

    tickets = relationship(
        "Ticket",
        back_populates="project",
        cascade="all, delete-orphan"
    )

    workflow_statuses = relationship(
        "ProjectWorkflowStatus",
        back_populates="project",
        cascade="all, delete-orphan",
        order_by="ProjectWorkflowStatus.order.asc()"
    )

    __table_args__ = (
        Index("idx_project_org_status", "org_id", "status"),
    )