from __future__ import annotations

from pydantic import BaseModel, ConfigDict

from backend.app.models.base import to_camel


class LoginRequest(BaseModel):
    username: str
    password: str


class RegisterRequest(BaseModel):
    username: str
    password: str
    full_name: str | None = None


class TokenResponse(BaseModel):
    access_token: str
    token_type: str = "bearer"

    model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)


class TokenPayload(BaseModel):
    sub: str
    exp: int


class UserPublic(BaseModel):
    username: str
    full_name: str | None = None

    model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)


class UserInDB(UserPublic):
    hashed_password: str


class AuthResponse(TokenResponse):
    user: UserPublic

    model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
