from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime


# Shared fields
class PermissionBase(BaseModel):
    role_id: int
    section_id: int
    create: Optional[bool] = False
    view: Optional[bool] = True
    edit: Optional[bool] = False
    delete: Optional[bool] = False


# For create request
class PermissionCreate(PermissionBase):
    pass


class SectionResponse(BaseModel):
    id: int
    name: str
    key: str

class Section(BaseModel):
    id: int
    name: str
# For update request
class PermissionUpdate(BaseModel):
    section_id: int
    create: bool = False
    view: bool = True
    edit: bool = False
    delete: bool = False





class PermissionResponse(BaseModel):
    id: int
    role_id: int
    section: SectionResponse
    create: bool
    view: bool
    edit: bool
    delete: bool

class UserBase(BaseModel):
    id: int
    name: str
    email: str
    role_id: int
    profile_picture: str

class UserWithPermissionsResponse(BaseModel):
    user: UserBase
    permissions: List[PermissionResponse]
# Response schema
class PermissionOut(PermissionBase):
    id: int
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True   # enables ORM mode

