/**
 * DraftPlanSummary AiCall — 一次产 3 type 摘要(one_page / medical_record / treatment_chain)。
 *
 * 设计:1 次 LLM 调用产 3 段(共享上下文,token 优化,3 行写库共享 agentInvocationId)。
 * 跟 PlanScript 平行:script 是"打电话怎么说",summary 是"打电话前看什么"。
 *
 * Input 比 script 富一些 — summary 需要按治疗链/病历叙述,要全 facts;
 * script 只需关键点(input.types 在 script call 是窄的)。
 */

export interface DraftPlanSummaryInput {
  patient: {
    nameMasked: string;
    gender: string | null;
    age: number | null;
  };
  clinicName: string;
  plan: {
    primaryScenarioLabel: string;
    priorityScore: number;
    /** 全部召回原因(不截 3,让 LLM 综合判断) */
    reasons: Array<{
      scenarioLabel: string;
      reason: string;
      priorityScore: number;
    }>;
  };
  /** Persona 全特征(用于 one_page 摘要) */
  personaFeatures: Array<{
    label: string;
    description: string;
    score: number | null;
  }>;
  /** 临床事实(按时间序倒排,encounter / payment / image / emr / order 全要,渲染时分组) */
  facts: Array<{
    type: string;       // encounter_record / payment_record / image_record ...
    occurredAt: string | null;
    title: string | null;
    summary: string | null;
    content: Record<string, unknown> | null;
  }>;
  /** 治疗链合成结果(已经由 ChainComposer 算好,直接喂 LLM) */
  chains: Array<{
    name: string;        // 如 "缺失牙修复链(36)"
    category: string;    // 治疗类别
    /// 5 阶段链状态(W3 末从 3 态升级)— 详见 chain-composer.service.ts
    status: 'discovered' | 'entered' | 'ongoing' | 'closed';
    currentStage: number;
    diagnosedAt?: string;
    gapDays?: number;
    nodes: Array<{ stage: number; label?: string; title?: string; detail?: string; doctor?: string; at: string; done?: boolean; current?: boolean }>;
  }>;
}

/**
 * 输出契约 — 3 段独立 Markdown,LLM 一次返回。
 * orchestrator 拆成 3 行 PlanSummary 入库(共享 agentInvocationId)。
 */
export interface DraftPlanSummaryOutput {
  /** 一页快读 — 200 字内,客服打电话前 30 秒扫一眼 */
  onePage: string;
  /** 病历摘要 — 按治疗时间序整理,500 字内,Markdown 列表 */
  medicalRecord: string;
  /** 治疗链摘要 — 按链组织,500 字内,讲清楚每条链当前在哪、下一步是什么 */
  treatmentChain: string;
}
