"""Schemas de registro, login y usuario autenticado."""
from pydantic import BaseModel, EmailStr, Field


class RegisterIn(BaseModel):
    email: EmailStr
    password: str = Field(min_length=6, max_length=72)  # 72 bytes: límite duro de bcrypt
    full_name: str = Field(min_length=2, max_length=120)
    phone: str | None = None
    role: str = "cliente"          # cliente | musico | ambos
    country: str = Field(default="VE", min_length=2, max_length=2)


class LoginIn(BaseModel):
    email: EmailStr
    password: str


class UserOut(BaseModel):
    id: int
    email: EmailStr
    full_name: str
    phone: str | None = None
    role: str
    country: str
    is_active: bool
    is_admin: bool

    model_config = {"from_attributes": True}


class TokenOut(BaseModel):
    access_token: str
    token_type: str = "bearer"
    user: UserOut
