"""
Pydantic schemas for permissions.
"""
from typing import Dict, List, Optional
from pydantic import BaseModel, Field

from app.models.permission import PermissionResource, PermissionAction


class RolePermissionBase(BaseModel):
    role: str
    resource: PermissionResource
    action: PermissionAction
    is_allowed: bool = True
    description: Optional[str] = None


class RolePermissionCreate(RolePermissionBase):
    pass


class RolePermissionUpdate(BaseModel):
    is_allowed: Optional[bool] = None
    description: Optional[str] = None


class RolePermissionResponse(RolePermissionBase):
    id: int

    class Config:
        from_attributes = True


class UserPermissionOverrideBase(BaseModel):
    resource: PermissionResource
    action: PermissionAction
    is_allowed: bool
    reason: Optional[str] = None


class UserPermissionOverrideCreate(UserPermissionOverrideBase):
    pass


class UserPermissionOverrideResponse(UserPermissionOverrideBase):
    id: int
    user_id: int

    class Config:
        from_attributes = True


class PermissionCheckRequest(BaseModel):
    resource: PermissionResource
    action: PermissionAction


class PermissionCheckResponse(BaseModel):
    resource: PermissionResource
    action: PermissionAction
    is_allowed: bool
    source: str  # "override", "role_db", "default"


class UserPermissionsResponse(BaseModel):
    user_id: int
    role: str
    permissions: Dict[str, List[str]]  # resource -> [actions]
    overrides: List[UserPermissionOverrideResponse]


class RolePermissionsMatrix(BaseModel):
    role: str
    permissions: Dict[str, List[str]]  # resource -> [actions]
