"""
認證(登入 / Token)相關 schema。
"""

from pydantic import BaseModel, EmailStr, Field

from app.schemas.user import UserPublic


# ---------- 登入請求 ----------
class LoginRequest(BaseModel):
    """POST /api/auth/login 的請求 body。"""

    email: EmailStr
    password: str = Field(..., min_length=1)


# ---------- Refresh Token 請求 ----------
class RefreshRequest(BaseModel):
    """POST /api/auth/refresh 的請求 body。"""

    refresh_token: str


# ---------- Token 回應 ----------
class TokenPair(BaseModel):
    """登入 / refresh 成功時回傳的 token 組合。

    access_token  : 短效(15 分鐘),用來呼叫 API
    refresh_token : 長效(7 天),用來換新的 access_token
    token_type    : 固定 "bearer",前端塞 Authorization: Bearer <token>
    """

    access_token: str
    refresh_token: str
    token_type: str = "bearer"


# ---------- 登入回應(含使用者資訊,前端登入後直接拿到自己資料,不用再多一次請求)----------
class LoginResponse(BaseModel):
    tokens: TokenPair
    user: UserPublic
