"""Pydantic 请求/响应模型。"""
import datetime as dt
from typing import Optional

from pydantic import BaseModel, Field


class RegisterIn(BaseModel):
    username: str = Field(min_length=3, max_length=64)
    password: str = Field(min_length=6, max_length=128)


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


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


class ApiKeyCreateIn(BaseModel):
    name: str = Field(default="default", max_length=128)


class ApiKeyOut(BaseModel):
    id: int
    name: str
    key_prefix: str
    created_at: dt.datetime
    last_used_at: Optional[dt.datetime] = None
    revoked: bool

    class Config:
        from_attributes = True


class ApiKeyCreatedOut(ApiKeyOut):
    """仅创建时返回明文 key，只此一次。"""
    key: str


class UserOut(BaseModel):
    id: int
    username: str


class MeOut(BaseModel):
    user: UserOut
    message: str
