import { z } from 'zod';

/**
 * 标准档输出 schema —— 与稳健档**同 4 字段形态**(opening/informMissed/reviewAdvice/closing),
 * 但 `.describe` **放宽**:只说该段目的与底线,**不给句位/小节脚手架**,段内由 LLM 自由编排。
 *
 * UI/存储与稳健档解耦:orchestrator 的 renderMarkdown/sections 对两档一视同仁(都映射这 4 字段)。
 */
export const StandardScriptSchema = z.object({
  tone: z
    .enum(['warm', 'professional', 'urgent'])
    .describe('整体语气标签:warm=温和家常 / professional=专业稳重 / urgent=有时效紧迫'),

  // ⭐ 标准档"标题不定":4 段标题由 LLM 自起,贴这个患者/这通电话,别用刻板模板名
  sectionTitles: z
    .object({
      opening: z.string().min(2).max(20).describe('开场段小标题(你起,自然口语,如"先打个招呼")'),
      informMissed: z.string().min(2).max(20).describe('告知段小标题(你起,贴本次问题,如"上次发现的小情况")'),
      reviewAdvice: z.string().min(2).max(20).describe('复查建议段小标题(你起)'),
      closing: z.string().min(2).max(20).describe('结束段小标题(你起)'),
    })
    .describe('为下面 4 段各起一个简短自然的小标题;⚠️ 标准档标题不固定,由你定,**别用"开场白/告知应治未治/复查建议/结束回访语"这种刻板模板名**'),

  opening: z
    .string()
    .min(50)
    .max(600)
    .describe(
      [
        '【开场白】先用 {智能称呼} 称呼并确认对方方便 → 自报家门 {自报家门} → 以 {诊断医生} 医生名义体现关怀 → 用 {智能时间显示} 问近况。',
        '分短句(行首 `•`);自己组织,自然有温度;禁大标题/分隔符/表情。',
      ].join('\n'),
    ),

  informMissed: z
    .string()
    .min(80)
    .max(900)
    .describe(
      [
        '【告知应治未治】只讲本次这一个 {应治未治项}(给了 {牙位} 就带上)。',
        '以"{诊断医生}医生上次检查发现"的口吻,结合"病历(诊断上下文)"里医生的真实记录,用自己的话口语化讲清"不处理的隐患"+"趁早处理的好处";温和提醒、非吓唬、非推销。',
        '不要套用现成模板句;医生没记录的别编。分短句(行首 `•`)。',
      ].join('\n'),
    ),

  reviewAdvice: z
    .string()
    .min(80)
    .max(900)
    .describe(
      [
        '【复查建议】邀约来院复查本次问题(对齐"本次目标"方向,但用关怀口吻、不推销治疗);用自己的话说明这次复查大概看什么(别写死分钟数)。',
        '引导预约严格用「{诊断医生}医生【时间段1】和【时间段2】这两个时间段有空,您看哪个方便?」',
        '⚠️【时间段】保留占位,禁写死具体时间。分短句(行首 `•`)。',
      ].join('\n'),
    ),

  closing: z
    .string()
    .min(40)
    .max(500)
    .describe(
      [
        '【结束回访语】预约成功 / 不成功两种,简短有温度。',
        '【预约成功】「我们【具体预约时间】见」+ 祝福;【预约不成功】「下周再联系您」+ 祝福。',
        '禁承诺式"已为您约好";禁加粗具体时间。',
      ].join('\n'),
    ),
});

export type StandardScriptOutputZ = z.infer<typeof StandardScriptSchema>;
