from sqlalchemy import Column, String, Text, Integer, BigInteger, Boolean, Index
from sqlalchemy.dialects.mysql import BIGINT, INTEGER, TINYINT, VARCHAR
from sqlalchemy.orm import relationship
from app.db.base_class import Base


class Category(Base):
    __tablename__ = "categories"

    category_id = Column(BIGINT(unsigned=True), primary_key=True, autoincrement=True)
    name = Column(VARCHAR(100), nullable=False)
    slug = Column(VARCHAR(120), nullable=False, unique=True, index=True)
    description = Column(Text, nullable=True)
    thumbnail_url = Column(VARCHAR(255), nullable=True)
    icon_url = Column(VARCHAR(255), nullable=True)
    is_active = Column(TINYINT(1), nullable=True, default=1)
    sort_order = Column(Integer, nullable=True, default=0)
    is_free = Column(TINYINT(1), nullable=True)
    is_popular = Column(TINYINT(1), nullable=True)
    created_at = Column(BIGINT(unsigned=False), nullable=False)
    updated_at = Column(BIGINT(unsigned=False), nullable=False)

    # Relationships
    tattoo_styles = relationship(
        "TattooStyle",
        back_populates="category",
        cascade="all, delete-orphan",
        passive_deletes=True,
    )

    def __repr__(self) -> str:
        return f"<Category id={self.category_id} slug={self.slug}>"
