import { z } from 'zod';

/**
 * DraftPlanSummary 输出 schema。
 * 3 段 Markdown 字符串,LLM 一次返回。
 *
 * 🔴 **⛔ 别把 `.min(50)` / `.max(600)` 这类硬长度约束加回来**（2026-08-15 拆掉）。
 *
 * 这条 call 当天从 `deepseek-v4-flash` 换到 qwen，而 qwen 写得短 ——
 * 硬下界会让它**必然 `too_small`**、整次调用报废。这不是推测：
 * `draft_plan_script` 的 **v27** 就是为同一件事改的
 * （「schema 去硬长度约束(.min/.max → describe 软引导,修 qwen too_small 必失败)」），
 * 深度档 / 标准档两个 schema 的注释里也各留了一句同样的理由。
 * ⚠️ 长度要求**没有取消**，只是搬进了 `.describe()`（「中文 200 字内」这些）——
 *   它是软引导：写长了不报废，写短了也不报废，⛔ 而报废对主管就是"生成失败"。
 * ⚠️ `.min(2)` 留着：那不是长度要求，是**不许空串**（口径同 `draft-recall-brief`：
 *   没事实时要如实写"暂无"，⛔ 不许交白卷）。
 */
export const DraftPlanSummarySchema = z.object({
  onePage: z
    .string()
    .min(2)
    .describe(
      '一页快读 — 中文 200 字内 Markdown。客服打电话前 30 秒扫一眼,必含:称呼/价值/上次到店/本次主要任务/风险提示。**禁止 bullet list**,用 2-3 个短段落。',
    ),

  medicalRecord: z
    .string()
    .min(2)
    .describe(
      '病历摘要 — 中文 500 字内 Markdown。按时间倒序整理就诊/治疗/付费/影像 4 大类事件。可以用 bullet list 或时间轴。重点突出"待做治疗"和"未闭环的随访"。',
    ),

  treatmentChain: z
    .string()
    .min(2)
    .describe(
      '治疗链摘要 — 中文 500 字内 Markdown。按治疗链分节(每条链一个 `### 链名` 标题),讲清楚:当前阶段、下一步建议、若已闭环则一句话总结。**必须**引用具体牙位号 / 治疗节点。',
    ),
});

export type DraftPlanSummaryOutputZ = z.infer<typeof DraftPlanSummarySchema>;
