/**
 * DraftRecallBrief AiCall — 把"本次召回原因 + 历史治疗 + 画像"提炼成**一句话召回简报**。
 *
 * 用途:详情页「参考话术」标题下方那行(原 RecallReasonLine 结构化富文本),压成一句话,
 * 回答客服打这通电话最该心里有数的四问:
 *   ① 患者是谁(从生命周期 / 价值 / 类型看)
 *   ② 帮患者解决什么问题(应治未治的缺口)
 *   ③ 邀约到诊是做什么(具体治疗动作)
 *   ④ 以什么切入(复查建议)—— 低门槛开口台阶,必须锚在 reviewAnchors 事实上,无事实不得编
 *
 * 跟 DraftRecallSummary / DraftPersonaSummary 平行,但输入更全(三类信号合一)。
 */
export interface DraftRecallBriefInput {
  patientNameMasked: string;
  /** 画像标签(含生命周期 / 价值分群 / 人群细分 → 判断"患者是谁")*/
  persona: Array<{ label: string; value: string }>;
  /** 历史治疗类目 + 次数(已做过什么,判断熟客/新客 + 信任锚)*/
  treatmentHistory: Array<{ category: string; count: number }>;
  /** 本次召回原因(应治未治项)*/
  reasons: Array<{
    subLabel: string; // 子场景中文(如 缺失牙未启动修复;仅医生建议时为建议名"建议种植")
    /** 触发来源:diagnosis=医生确诊 / recommendation=医生建议(非确诊) / image_finding=影像AI。
     *  recommendation 时**不可假设牙已缺失/空着**,按医生建议的治疗动作措辞。 */
    source: 'diagnosis' | 'recommendation' | 'image_finding';
    diagnosis: string | null; // 触发诊断中文(如 牙列丢失/缺牙);仅建议时为 null
    tooth: string | null; // 牙位(如 47)
    daysSinceText: string; // 距今(如 131 天(4 个月))
    expectedCategories: string[]; // 期望/未启动治疗类目中文(如 种植 / 修复 / 冠桥)
  }>;
  /**
   * 复查切入锚点(第④问的兜底事实依据,防编造):
   *   lastVisitText    — 最近一次实际治疗距今(如 8 个月前);null=无记录
   *   lastCleaningText — 最近一次洁牙/检查/牙周洁治距今;null=无记录
   * 仅当 doctorGuidance 为空时使用;LLM 只能引用这里的值,没给就用不带时间的通用复查邀约。
   */
  reviewAnchors: {
    lastVisitText: string | null;
    lastCleaningText: string | null;
  };
  /**
   * 医生计划/建议/医嘱(第④问的**最优先**事实依据)—— 统一条目形态,核心是 verbatim 原话属性:
   *   kind     — plan=治疗计划(treatment_record kind=planned) / recommendation=医生建议 / advice=医嘱(emr.doctor_advice)
   *   label    — 归一名(治疗类目 / 建议名;医嘱固定 '医嘱')
   *   verbatim — **原话**(计划=subtype 原文 / 建议=name 原文 / 医嘱=doctor_advice 原文;截断 ≤40 字);null=只有大类
   * 有任一条 → 切入围绕医生真实交代展开(优先引用原话要点),不再引用洁牙锚点时间。
   */
  doctorGuidance: Array<{
    kind: 'plan' | 'recommendation' | 'advice';
    label: string;
    verbatim: string | null;
    tooth: string | null;
    atText: string | null;
  }>;
}

export interface DraftRecallBriefOutput {
  /** 一句话召回简报(中文,≤50 字最佳)*/
  summary: string;
}
