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

from app.models.base import BaseModel


class Menu(BaseModel):
    __tablename__ = "menus"
    __table_args__ = {"schema": "public"}
    code = Column(String(50), unique=True, nullable=False, index=True)
    name = Column(String(100), nullable=False)
    path = Column(String(255), nullable=False)
    icon = Column(String(50), nullable=True)
    parent_id = Column(Integer, ForeignKey("public.menus.id"), nullable=True, index=True)
    sort_order = Column(Integer, default=0, nullable=False)
    is_active = Column(Boolean, default=True, nullable=False, index=True)
    parent = relationship("Menu", remote_side="Menu.id", backref="children")
    role_menus = relationship(
        "RoleMenu",
        back_populates="menu",
        cascade="all, delete-orphan",
        foreign_keys="RoleMenu.menu_id",
    )
