from pydantic import BaseModel, ConfigDict

from app.models.role import AksiEnum, ModulEnum


class PermissionItem(BaseModel):
    modul: ModulEnum
    aksi: AksiEnum


class RoleCreate(BaseModel):
    nama: str
    deskripsi: str | None = None
    spbu_id: int | None = None


class RoleUpdate(BaseModel):
    nama: str | None = None
    deskripsi: str | None = None
    can_be_scheduled: bool | None = None
    can_login_web: bool | None = None


class RolePermissionResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: int
    role_id: int
    modul: ModulEnum
    aksi: AksiEnum


class RoleResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: int
    spbu_id: int | None = None
    nama: str
    deskripsi: str | None = None
    is_system: bool
    can_be_scheduled: bool = False
    can_login_web: bool = True
    permissions: list[RolePermissionResponse] = []


class PermissionsUpdate(BaseModel):
    permissions: list[PermissionItem]
