"""Pydantic schemas for RBAC models."""

from datetime import datetime
from typing import Optional

from pydantic import BaseModel, Field


# ── Role ─────────────────────────────────────────────────────────── #
class RoleCreate(BaseModel):
    name: str = Field(..., min_length=1, max_length=50)
    description: Optional[str] = Field(None, max_length=500)


class RoleRead(BaseModel):
    id: str
    name: str
    description: Optional[str]
    is_system: bool
    created_at: datetime

    model_config = {"from_attributes": True}


# ── Permission ───────────────────────────────────────────────────── #
class PermissionRead(BaseModel):
    id: str
    code: str
    description: Optional[str]
    resource: str
    action: str
    created_at: datetime

    model_config = {"from_attributes": True}


# ── Role-Permission assignment ───────────────────────────────────── #
class RolePermissionAssign(BaseModel):
    role_id: str
    permission_ids: list[str]


# ── User-House-Role ──────────────────────────────────────────────── #
class UserHouseRoleAssign(BaseModel):
    user_id: str
    house_id: str
    role_id: str


class UserHouseRoleRead(BaseModel):
    id: str
    user_id: str
    house_id: str
    role_id: str
    granted_by: Optional[str]
    created_at: datetime

    model_config = {"from_attributes": True}
