"""文风学习 + 回炉端点的请求/响应 schema（C3 扩 / ARCH §7.2 / UX §6.9 / §8.3）。

snake_case（命名契约，见 memory/gotchas）。前端经 OpenAPI→TS 客户端消费——改字段
须 `pnpm gen:api` 重生成。
"""

from __future__ import annotations

import uuid
from typing import Literal

from pydantic import BaseModel, Field


class StyleLearnRequest(BaseModel):
    """学文风：上传样本正文（前端可读文件转文本）+ 模式（首学 / 更新）。"""

    samples: list[str] = Field(min_length=1)
    mode: Literal["create", "update"] = "create"


class StyleLearnResponse(BaseModel):
    """学文风受理：返回 job_id（长任务，走 `GET /jobs/{id}` 轮询）。"""

    job_id: uuid.UUID


class DimensionEntry(BaseModel):
    """单个文风维度：名称 + 判定值 + 原文证据摘录（强类型，替代裸 dict[str, Any]）。"""

    name: str
    value: str
    evidence: list[str] = Field(default_factory=list)


class StyleFingerprintResponse(BaseModel):
    """最新文风指纹（`GET /style`）：完整 16 维（名称/值/证据）+ 版本（对齐 UX §6.9）。

    DB 存两列并行 dict（`{name:value}` + `{name:[evidence]}`）；响应合并为
    `list[DimensionEntry]`，给 TS 客户端强类型（替代弱类型 `dict[str, Any]`）。
    """

    dimensions: list[DimensionEntry] = Field(default_factory=list)
    version: int


class RefineRequest(BaseModel):
    """回炉：重写选中段（可选改写指令）。"""

    segment: str = Field(min_length=1)
    instruction: str | None = None


class RefineResponse(BaseModel):
    """回炉结果：原段 + 重写段（不写库，作者采纳经既有 draft 自动保存合入）。"""

    original: str
    refined: str
