from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship

from app.models.base import BaseModel


class Role(BaseModel):
    __tablename__ = "roles"
    __table_args__ = {"schema": "public"}
    code = Column(String(50), unique=True, nullable=False, index=True)
    name = Column(String(100), nullable=False)
    description = Column(Text, nullable=True)
    is_system = Column(Boolean, default=False, nullable=False)
    tenant_id = Column(Integer, ForeignKey("public.tenants.id"), nullable=True, index=True)
    user_roles = relationship(
        "UserRole",
        back_populates="role",
        cascade="all, delete-orphan",
        foreign_keys="UserRole.role_id",
    )
    role_menus = relationship(
        "RoleMenu",
        back_populates="role",
        cascade="all, delete-orphan",
        foreign_keys="RoleMenu.role_id",
    )
    role_permissions = relationship(
        "RolePermission",
        back_populates="role",
        cascade="all, delete-orphan",
        foreign_keys="RolePermission.role_id",
    )
