from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, EmailStr, Field

class PlatformRoleInput(BaseModel):
    key: str = Field(min_length=3, max_length=60, pattern=r"^[A-Z][A-Z0-9_]*$")
    name: str = Field(min_length=3, max_length=100)
    description: str | None = Field(default=None, max_length=1000)
    permissions: list[str] = Field(default_factory=list, max_length=20)

class PlatformStaffInviteInput(BaseModel):
    email: EmailStr
    role_key: str = Field(min_length=3, max_length=60)
    permission_overrides: list[str] = Field(default_factory=list, max_length=20)

class PlatformStaffAccessInput(BaseModel):
    role_key: str = Field(min_length=3, max_length=60)
    permission_overrides: list[str] = Field(default_factory=list, max_length=20)
    reason: str = Field(min_length=3, max_length=500)

class PlatformReasonInput(BaseModel):
    reason: str = Field(min_length=3, max_length=500)

class PlatformStaffResponse(BaseModel):
    id: UUID
    email: EmailStr
    full_name: str | None
    is_active: bool
    is_email_verified: bool
    platform_role: str | None
    platform_permissions: list[str]
    platform_staff_status: str | None
    platform_last_login_at: datetime | None
    created_at: datetime
    model_config = {"from_attributes": True}
