from uuid import UUID

from pydantic import BaseModel, Field, EmailStr, ConfigDict

config = ConfigDict(from_attributes=True)


# TODO: add pydantic field validator for strong password
class UserSchema(BaseModel):
    model_config = config
    email: EmailStr = Field(title="User’s email", description="User’s email")
    first_name: str = Field(title="User’s first name", description="User’s first name")
    last_name: str = Field(title="User’s last name", description="User’s last name")
    password: str = Field(title="User’s password", description="User’s password")


class UserResponse(BaseModel):
    uuid: UUID = Field(title="User’s id", description="User’s id")
    email: EmailStr = Field(title="User’s email", description="User’s email")
    first_name: str = Field(title="User’s first name", description="User’s first name")
    last_name: str = Field(title="User’s last name", description="User’s last name")
    access_token: str = Field(title="User’s token", description="User’s token")


class TokenResponse(BaseModel):
    access_token: str = Field(title="User’s access token", description="User’s access token")
    token_type: str = Field(title="User’s token type", description="User’s token type")


class UserLogin(BaseModel):
    model_config = config
    email: EmailStr = Field(title="User’s email", description="User’s email")
    password: str = Field(title="User’s password", description="User’s password")
