import enum
from sqlalchemy import (
    Column,
    String,
    Enum as SQLEnum,
    ForeignKey,
)
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
from utils.db_connect import Base
from utils.db_connect import BaseModelForTable


class OrganizationStatus(str, enum.Enum):
    ACTIVE = "ACTIVE"
    SUSPENDED = "SUSPENDED"


class Organization(BaseModelForTable):
    __tablename__ = "organizations"

    name = Column(
        String,
        nullable=False
    )

    slug = Column(
        String,
        unique=True,
        nullable=False,
        index=True
    )

    logo_url = Column(
        String,
        nullable=True
    )

    status = Column(
        SQLEnum(OrganizationStatus),
        default=OrganizationStatus.ACTIVE,
        nullable=False
    )

    owner_id = Column(
        UUID(as_uuid=True),
        ForeignKey("users.id", ondelete="CASCADE", use_alter=True, name="fk_org_owner_id_users"),
        nullable=False,
        index=True
    )


    owner = relationship(
        "User",
        back_populates="owned_organizations",
        foreign_keys=[owner_id]
    )

    invites = relationship(
        "OrganizationUserInvite",
        back_populates="organization",
        cascade="all, delete-orphan"
    )

    projects = relationship(
        "Project",
        back_populates="organization",
        cascade="all, delete-orphan"
    )

    labels = relationship(
        "Label",
        back_populates="organization",
        cascade="all, delete-orphan"
    )

    releases = relationship(
        "Release",
        back_populates="organization",
        cascade="all, delete-orphan"
    )
