/**
 * 深度档类型 —— 3 步 pipeline(规划 → 写 → 独立对抗校验 + repair)的中间产物 + 输入契约。
 *
 * 共用脊柱(AiCallRunner,每步各落 agent_invocations)、输入(ScriptContext)、安全闸、兜底;
 * 差异:多步编排(DeepScriptStrategy)+ 多段不定输出 + 逐句接地校验。
 */
import type { ScriptContext, DraftPlanScriptOutput } from '../../shared/input.types';
import type { Tone } from '../../shared/tone';

// ── 步骤1:规划(planner)产物 ──
export interface DeepPlanSection {
  /** 段标识(英文短,如 'opening' / 'missed_11' / 'review' / 'close';仅内部串联) */
  key: string;
  /** 中文小标题(写步会再润色,这里给方向) */
  title: string;
  /** 这段要达成什么(一句) */
  intent: string;
  /** 要点(口语化,均须来自 ScriptContext 事实) */
  points: string[];
}
export interface DeepPlan {
  sections: DeepPlanSection[];
}

// ── 步骤2:写(writer)产物 = 深度档草稿(多段不定) ──
export interface DeepDraftSection {
  title: string;
  markdown: string;
}
export interface DeepDraft {
  tone: Tone;
  sections: DeepDraftSection[];
}

// ── 步骤3:独立对抗校验(verifier)产物 ──
export interface DeepVerifyIssue {
  /** 出问题的段标题 / 序号 */
  section: string;
  /** 问题(接地不实 / 安全越界 / 编造) */
  problem: string;
  /** 修法建议(回喂 writer repair) */
  fix: string;
}
export interface DeepVerify {
  /** 全部接地 + 安全 → true */
  pass: boolean;
  issues: DeepVerifyIssue[];
  /** 质量细项打分(1-5)—— 只评质量,不影响 pass;回填到 write 调用的 judgeScore/judgeRubric 供 eval */
  quality: {
    natural: number;
    warmth: number;
    focus: number;
    nonPushy: number;
    overall: number;
  };
}

// ── 各步 AiCall 输入(复合;runner 落 inputSnapshot 用) ──
export interface DeepWriteInput {
  ctx: ScriptContext;
  plan: DeepPlan;
  /** repair 轮:把校验不过的点回喂 writer 修(≤1 轮) */
  repairIssues?: DeepVerifyIssue[];
  /** repair 轮:上一稿(让 writer 在原稿上逐条改,而非凭大纲重写 → 严格按自检 fix 修) */
  prevDraft?: DeepDraft;
}
export interface DeepVerifyInput {
  ctx: ScriptContext;
  draft: DeepDraft;
}

/** 4 字段稳健输出 → 多段 DeepDraft(深度档兜底:写步失败回退稳健模板时用) */
export function draftOutputToDeep(out: DraftPlanScriptOutput): DeepDraft {
  const t = out.sectionTitles;
  return {
    tone: out.tone,
    sections: [
      { title: t?.opening ?? '开场白', markdown: out.opening },
      { title: t?.informMissed ?? '告知应治未治', markdown: out.informMissed },
      { title: t?.reviewAdvice ?? '复查建议', markdown: out.reviewAdvice },
      { title: t?.closing ?? '结束回访语', markdown: out.closing },
    ],
  };
}
