"""User schemas."""

from __future__ import annotations

from pydantic import BaseModel, EmailStr, Field


class UserCreate(BaseModel):
    email: EmailStr = Field(..., examples=["user@leocrm.local"])
    name: str = Field(..., min_length=1, max_length=200, examples=["John Doe"])
    password: str = Field(..., min_length=8, examples=["secure-password"])
    role: str = Field(default="viewer", examples=["viewer"])
    role_id: str | None = Field(default=None, description="UUID of a custom Role", examples=["550e8400-e29b-41d4-a716-446655440000"])
    is_active: bool = True


class UserUpdate(BaseModel):
    name: str | None = Field(None, min_length=1, max_length=200)
    first_name: str | None = Field(None, max_length=100)
    last_name: str | None = Field(None, max_length=100)
    email: EmailStr | None = None
    avatar_url: str | None = None
    role: str | None = None
    role_id: str | None = Field(default=None, description="UUID of a custom Role; send null to clear")
    is_active: bool | None = None
    current_password: str | None = Field(None, description="Required when changing password")
    new_password: str | None = Field(None, min_length=8, description="New password")


class UserResponse(BaseModel):
    id: str
    email: str
    name: str
    first_name: str | None = None
    last_name: str | None = None
    avatar_url: str | None = None
    role: str
    role_id: str | None = None
    is_active: bool
    tenant_id: str


class PaginatedUsers(BaseModel):
    items: list[UserResponse]
    total: int
    page: int
    page_size: int
