"""User schemas for VoIdea API.""" from datetime import datetime from typing import Any, Optional from pydantic import BaseModel, EmailStr, Field class UserCreate(BaseModel): email: EmailStr password: str = Field(min_length=8, max_length=128) display_name: str = Field(min_length=1, max_length=255) accepted_terms: bool = Field(default=True, description="Must accept Terms & Privacy") class UserUpdate(BaseModel): display_name: Optional[str] = Field(None, min_length=1, max_length=255) avatar_url: Optional[str] = None class UserResponse(BaseModel): id: str email: str display_name: str avatar_url: Optional[str] = None is_active: bool is_superuser: bool role: str = "user" is_owner: bool = False permissions: Optional[dict[str, Any]] = None accepted_terms_at: Optional[datetime] = None accepted_terms_version: Optional[str] = None oauth_provider: Optional[str] = None created_at: datetime updated_at: datetime class ChangePasswordRequest(BaseModel): current_password: str new_password: str = Field(min_length=8, max_length=128) class SubscriptionInfo(BaseModel): plan_name: str plan_code: str status: str expires_at: Optional[datetime] = None features: Optional[dict[str, Any]] = None class VoiceSettingsResponse(BaseModel): preset: str overrides: dict[str, Any] available_presets: list[str] preset_values: dict[str, Any] class VoiceSettingsUpdate(BaseModel): preset: Optional[str] = None overrides: Optional[dict[str, Any]] = None reset: Optional[bool] = None