from pydantic import BaseModel
from typing import Optional
from datetime import datetime

class UserRoleBase(BaseModel):
    user_id: str
    role_name: str
    scope: Optional[str] = None
    notes: Optional[str] = None

class UserRoleCreate(UserRoleBase):
    assigned_by: Optional[str] = None
    expires_in_days: Optional[int] = None

class UserRoleUpdate(BaseModel):
    scope: Optional[str] = None
    notes: Optional[str] = None
    is_active: Optional[bool] = None
    expires_in_days: Optional[int] = None

class UserRoleResponse(UserRoleBase):
    assigned_by: Optional[str] = None
    assigned_at: datetime
    is_active: bool
    is_permanent: bool
    expires_at: Optional[datetime] = None
    revoked_at: Optional[datetime] = None
    revoked_by: Optional[str] = None
    revocation_reason: Optional[str] = None
    created_at: datetime
    updated_at: datetime

    class Config:
        orm_mode = True
        json_encoders = {
            datetime: lambda v: v.isoformat()
        }