"""Schémas Pydantic pour les utilisateurs."""
from pydantic import BaseModel, EmailStr, Field
from typing import Optional
from datetime import datetime


class UserBase(BaseModel):
    """Schéma de base pour un utilisateur."""
    email: EmailStr
    name: str = Field(..., min_length=1, max_length=100)


class UserCreate(UserBase):
    """Schéma pour la création d'un utilisateur."""
    password: str = Field(..., min_length=8, max_length=100)
    referral_code: Optional[str] = Field(None, description="Code de parrainage (optionnel)")


class UserUpdate(BaseModel):
    """Schéma pour la mise à jour d'un utilisateur."""
    name: Optional[str] = Field(None, min_length=1, max_length=100)
    is_premium: Optional[bool] = Field(None, description="Statut Premium")


class UserResponse(BaseModel):
    """Schéma pour la réponse d'un utilisateur."""
    id: int
    email: EmailStr
    name: str
    is_premium: bool = False
    referral_code: Optional[str] = None
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True


class UserLoginRequest(BaseModel):
    """Schéma pour la connexion d'un utilisateur."""
    email: EmailStr
    password: str
