import { z } from 'zod';

/**
 * DraftRecallBrief 输出:**四点**召回简报(2026-08-05 从一句话拆开)。
 *
 * ⚠️ **判定逻辑一个字没改** —— 输入要素、优先级(批次福利 > 医生原话 > 复查锚点)、
 *   防编造的几条硬约束全部照旧,变的只是"一句话"变成"四句各管一件事"。
 *   拆开的理由:原来那一句要同时塞进"谁 + 缺口 + 后果 + 切入",长到 65-90 字,
 *   客服扫一眼抓不住重点;四点各自成句,想看哪点看哪点。
 *
 * ⚠️ 四段都 `.min(2)` —— **不许空串**。没有事实时如实写"暂无 / 此前无回访记录",
 *   空串会让界面出现一个没头没尾的空行,比一句"暂无"更让人困惑。
 */
export const DraftRecallBriefSchema = z.object({
  who: z
    .string()
    .min(2)
    .max(40)
    .describe(
      '① **患者是谁**(≤20 字最佳)。只用给定画像标签:生命周期(新客/熟客)、价值分群、人群细分。' +
        '⛔ 不编个人情节、不猜职业性格。例:"重要发展新客,累计消费 1.3 万"。',
    ),
  history: z
    .string()
    .min(2)
    .max(80)
    .describe(
      '② **跟我们熟不熟 + 上次联系是什么事、结果怎么样**(≤40 字最佳)。' +
        // 🔴 2026-08-04 产品评审:第二句要回答「他跟我们以前的关系亲密度是什么样的,
        //   就是联系他多不多,然后有没有过不好的体验」。原来只写了"最近一次",少了"多不多"。
        '\n🔴 **先给"熟不熟"再给"上次那件事"**,两件都要:' +
        '\n  · **熟不熟**看 `contactStats`:联系过几次、从多久前开始。' +
        '例:"两年里联系过 7 次";只有 1 次就说"只联系过 1 次";' +
        '`total=0` 说"此前无回访记录"。⛔ 别去数下面那几条回访自己算总数 —— 那里只给了最近 3 条。' +
        '\n  · **不好的体验**看 `hangUpCount`:>0 才说,如实说"被挂断过 N 次";' +
        '⛔⛔ **等于 0 时什么都不说** —— 绝不许写"没有不良记录""关系良好""沟通顺畅":' +
        '没有记录**不等于**关系好,那是拿"没证据"当"反面"用,是凭空造事实。' +
        '⛔ 也不许把"未接"说成不好的体验(没接通的原因太多,那是推测)。' +
        '\n  · **上次那件事**用下面的回访历史,' +
        '这次是干什么的(半年洁牙提醒 / 种植潜客…)+ 结果(未接 / 无不适 / 约了时间…),有几样说几样。' +
        '🔴 ⛔ **不许说「没留下结果」「无记录」这种含糊话** —— 结果栏通常是有东西的' +
        '(实测:库里写着"诊后回访未接"却被说成"没留下结果");有什么说什么。' +
        '🔴 ⛔ **不许出现「备注」「记录里写」这类字眼** —— 那是数据存哪儿的说法,客服要的是事情本身;' +
        '⛔「常规回访,备注半年洁牙提醒」 ✅「常规回访提醒他半年洁牙」。' +
        '🔴 ⛔ **不许报流程状态**(「任务已完成 / 未完成 / 已归档」)—— 那是内部流转,' +
        '客服打电话前用不上(产品 2026-08-06 走查点名去掉)。' +
        '⚠️ 备注为空才退回「时间 + 类型」,没联系上就说"没联系上"。' +
        '⛔ 没有记录时**如实写"此前无回访记录"**,不许留白、不许编"曾多次联系"。' +
        '⛔ 不许把未来的预约回访说成历史。例:"6 月常规回访,当时约了拔牙"。',
    ),
  problem: z
    .string()
    .min(2)
    .max(70)
    .describe(
      '③ **解决什么 + 不处理的后果**(≤35 字最佳)。**站在患者立场讲"他为什么该来"**:' +
        '把应治未治缺口翻译成患者能感知的影响(如 缺牙久拖邻牙易移位、龋齿不补会伤神经),' +
        '带上牙位和拖了多久。' +
        '⛔ 后果要客观,不夸大不吓唬(别下"会掉光""很危险"式结论)。' +
        '⛔ **严禁编造患者意愿/情绪**:「应治未治」是缺口不是意愿,不能说"想做/有意向"。' +
        '例:"47 缺牙 4 个月未修复,越拖邻牙越易移位"。',
    ),
  hook: z
    .string()
    .min(2)
    .max(70)
    .describe(
      '④ **怎么开口**(≤35 字最佳)。优先级**从高到低**,取到哪条用哪条,⛔ 不要堆叠:' +
        '(a) 有**福利勾子**→ 围绕福利原文开口,**只能说原文包含的内容**,' +
        '⛔ 不得追加条件/期限/名额、不得夸大;' +
        '⛔ **不许出现「本批/这批/批次」** —— 那是主管派单的内部词,对患者说不通' +
        '(实测出过"本批有全场 8 折优惠");福利就直接说福利本身;' +
        '(b) 有**医生计划/建议/医嘱**→ 围绕医生真实交代展开,优先引用原话要点(加「」);' +
        '(c) 都没有 → 用复查锚点(最近一次治疗 / 洁牙检查距今)给低门槛台阶,' +
        '⛔ 只能引用锚点给的事实,没有锚点就用**不带时间数字**的通用复查邀约。' +
        '目标治疗动作随切入一笔带过,口吻为患者着想,不催单。' +
        '例:"医生计划「定期洁牙」,可约洁牙检查顺带评估牙周基础治疗"。',
    ),
});
