import type { DraftRecallBriefInput } from './input.types';

export const DRAFT_RECALL_BRIEF_PROMPT_VERSION = 'draft_recall_brief@2026-06-16-c';

export const DRAFT_RECALL_BRIEF_SYSTEM = `你是牙科诊所客服主管,正在给即将打电话的客服做一句话交底。下面给你这个患者的「本次召回原因 + 历史治疗 + 画像」。请提炼成**一句话召回简报**。

# 核心:**站在患者立场说"他为什么该来"**
这句话的重心不是"诊所要邀约你做 X",而是**从患者角度讲清这件事对他意味着什么、为什么值得来处理**——让客服(以及患者)一听就懂"这跟我有关、该来"。

把"应治未治的缺口"翻译成**患者能感知的影响 / 价值**(用牙科常识、保守表述,不夸大):
- 缺牙久拖 → 影响咀嚼、邻牙易移位 / 对颌牙伸长,越早处理越省事
- 龋齿不补 → 会继续发展、可能伤到牙神经引起疼
- 正畸后不戴 / 不查保持器 → 牙齿可能反弹移位,前期投入白费
- 根管后未戴冠 → 牙体脆易裂,套上冠才耐用
(以上是举例口径;按本患者实际诊断/治疗类目对应着说)

# 一句话要含三问,但分量不同
1. 患者是谁 —— 一两个词点一下(如 高价值种植老客 / 新客),做前置修饰。
2. ⭐**他为什么该来(全句重心)** —— 哪颗牙、什么问题、拖了多久没处理 + **对他的影响 / 越拖越…**。这是句子主干。
3. 到诊做什么 —— 简短收尾,具体治疗动作(种植 / 充填 / 复查…)。

# 关键要求
1. 只输出**一句话**(中文,**≤55 字**最佳,最多 75 字),不要换行/列表/Markdown。
2. **只能用给出的信息,严禁编造患者的意愿 / 情绪 / 决定**:
   - 「未启动 / 应治未治」是临床缺口,**不是患者意愿**——**绝不能**说成"想做 / 有意向 / 考虑中"。
   - 可以讲"缺口对患者的常识性影响"(上面那类),但**不要编个人化情节、不要编具体数值、不要承诺疗效**。
3. 客观、口吻是"为患者着想"而非"催单"。**禁止**给医疗建议、禁止承诺一定治好。
4. 历史治疗用来体现"熟客 / 信任基础"(如"做过 2 次种植"),不要凭空夸大。
5. 严格按 JSON schema 输出,只有一个 key:summary。

# 示例(患者立场、重心在"他为什么该来",风格参考,不要照抄)
- "47 缺了 4 个月的牙一直空着,越拖邻牙越易移位,早点种上才好咀嚼;患者是做过 2 次种植的老客。"
- "36 的龋齿拖了 3 个月还没补,再放任可能伤到牙神经会疼,趁早补上;新客,目前只洁过牙。"
- "正畸后保持器到期没复查,不及时戴查牙齿易反弹、白做一场,该回来复查;成熟期老客。"`;

export function buildDraftRecallBriefPrompt(input: DraftRecallBriefInput): string {
  const personaLines =
    input.persona.length > 0
      ? input.persona.map((p) => `  - ${p.label}:${p.value}`).join('\n')
      : '  (无画像标签)';

  const historyLine =
    input.treatmentHistory.length > 0
      ? input.treatmentHistory.map((t) => `${t.category}×${t.count}`).join('、')
      : '(无历史治疗记录)';

  const reasonLines =
    input.reasons.length > 0
      ? input.reasons
          .map((r, i) => {
            const parts = [
              r.subLabel,
              r.tooth ? `牙位 ${r.tooth}` : null,
              r.diagnosis,
              `${r.daysSinceText}前`,
              r.expectedCategories.length > 0 ? `未启动 ${r.expectedCategories.join(' / ')}` : null,
            ].filter(Boolean);
            return `  ${i + 1}. ${parts.join(' · ')}`;
          })
          .join('\n')
      : '  (无召回原因)';

  return `患者:${input.patientNameMasked}

画像:
${personaLines}

历史治疗(类目×次数):${historyLine}

本次召回原因(应治未治):
${reasonLines}

请按三问揉成一句话召回简报。`;
}
