from sqlalchemy import Integer, Boolean, String
from sqlalchemy.orm import Mapped, mapped_column
from typing import Optional
from src.apps.base.models.base import Base


class Permission(Base):
    """
    Permission Model: ORM class for Permission Entity
    """

    __tablename__ = "permissions"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True, autoincrement=True)
    module: Mapped[str] = mapped_column(String(100), nullable=False)
    submodule: Mapped[Optional[str]] = mapped_column(String(100), nullable=True)
    operation: Mapped[str] = mapped_column(String(100), nullable=False)
    slug: Mapped[str] = mapped_column(String(200), unique=True, index=True, nullable=False)
    operation_label: Mapped[Optional[str]] = mapped_column(String(200), nullable=True)
    display_order: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
    is_system: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False, server_default="true")
