"""Kimi Code OAuth device-flow 端点的响应 schema（C3 扩 K1.3 / ARCH §7.2 / §7.4）。

snake_case（命名契约，见 memory/gotchas）。前端经 OpenAPI→TS 客户端消费——改字段须
`pnpm gen:api` 重生成。**响应绝不含 access/refresh token**（只 user_code + 轮询信息）。
"""

from __future__ import annotations

import uuid

from pydantic import BaseModel


class OAuthStartResponse(BaseModel):
    """device flow 启动：返回 job_id（轮询 `GET /jobs/{id}`）+ 用户面展示信息。

    前端展示 `user_code`、打开 `verification_uri`（或 `verification_uri_complete`），并按
    `interval` 轮询 job 直到 `done`（已连接）/`failed`（过期/拒绝）。**无 token**。
    """

    job_id: uuid.UUID
    user_code: str
    verification_uri: str
    verification_uri_complete: str | None = None
    expires_in: int
    interval: int


class OAuthStatusResponse(BaseModel):
    """连接状态：是否已连接 + access token 过期时刻（ISO8601；**无 token 本体**）。"""

    connected: bool
    expires_at: str | None = None


class OAuthDisconnectResponse(BaseModel):
    """断开：是否删到凭据行。"""

    disconnected: bool
