from pydantic import BaseModel, ConfigDict


class LoginRequest(BaseModel):
    identifier: str  # accepts email or username
    password: str


class TokenResponse(BaseModel):
    access_token: str
    refresh_token: str
    token_type: str = "bearer"


class RefreshRequest(BaseModel):
    refresh_token: str | None = None


class UserAssignmentWithPermissions(BaseModel):
    spbu_id: int
    spbu_name: str
    role_id: int
    role_name: str
    can_be_scheduled: bool
    permissions: list[str]  # e.g. ["absensi:view", "absensi:delete"]


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

    id: int
    name: str
    email: str
    is_superadmin: bool
    is_active: bool
    assignments: list[UserAssignmentWithPermissions] = []
