from utils.db_connect import BaseModelForTable
from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship

class Label(BaseModelForTable):
    __tablename__ = "labels"

    org_id = Column(UUID(as_uuid=True), ForeignKey("organizations.id"), nullable=False)
    created_by = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False)
    name = Column(String(255), nullable=False)
    color = Column(String(20), nullable=True)

    organization = relationship("Organization", back_populates="labels")
    creator = relationship("User", back_populates="created_labels")
    ticket_labels = relationship("TicketLabel", back_populates="label")


class TicketLabel(BaseModelForTable):
    __tablename__ = "ticket_labels"

    ticket_id = Column(UUID(as_uuid=True), ForeignKey("tickets.id"), nullable=False)
    label_id = Column(UUID(as_uuid=True), ForeignKey("labels.id"), nullable=False)

    ticket = relationship("Ticket", back_populates="ticket_labels")
    label = relationship("Label", back_populates="ticket_labels")


class Release(BaseModelForTable):
    __tablename__ = "releases"

    org_id = Column(UUID(as_uuid=True), ForeignKey("organizations.id"), nullable=False)
    name = Column(String(255), nullable=False)

    organization = relationship("Organization", back_populates="releases")
    ticket_releases = relationship("TicketRelease", back_populates="release", cascade="all, delete-orphan")

    @property
    def ticket_id(self):
        return None


class TicketRelease(BaseModelForTable):
    __tablename__ = "ticket_releases"

    ticket_id = Column(UUID(as_uuid=True), ForeignKey("tickets.id"), nullable=False)
    release_id = Column(UUID(as_uuid=True), ForeignKey("releases.id"), nullable=False)

    ticket = relationship("Ticket", back_populates="ticket_releases")
    release = relationship("Release", back_populates="ticket_releases")