/**
 * Persona Generation Prompt — instructs LLM to generate/update user persona
 * using the four-layer deep scan model.
 *
 * v2: Updated prompt with anti-hallucination guardrails, richer output
 * template with per-chapter writing guidance, and streamlined iteration guide.
 */

/**
 * @typedef {Object} PersonaPromptParams
 * @property {"first"|"incremental"} params.mode
 * @property {string} params.currentTime
 * @property {number} params.totalProcessed
 * @property {number} params.sceneCount
 * @property {number} params.changedSceneCount
 * @property {string} params.changedScenesContent
 * @property {string} [params.existingPersona]
 * @property {string} [params.triggerInfo]
 */

/**
 * Build the persona generation prompt.
 * @param {PersonaPromptParams} params
 * @returns {string}
 */
export function buildPersonaPrompt(params) {
  const {
    mode,
    currentTime,
    totalProcessed,
    sceneCount,
    changedSceneCount,
    changedScenesContent,
    existingPersona,
    triggerInfo,
  } = params;

  const modeLabel = mode === "first" ? "🆕 首次生成" : "🔄 迭代更新";

  const triggerSection = triggerInfo
    ? `\n### 触发信息\n${triggerInfo}\n`
    : "";

  const existingPersonaSection = existingPersona
    ? `\n## 📄 当前 Persona（工程已预加载）\n\n` +
      `*以下是现有 persona.md 的完整内容（${existingPersona.length} 字符），基于此更新后请控制在2000字内：*\n\n` +
      `\`\`\`markdown\n${existingPersona}\n\`\`\`\n\n---\n`
    : "";

  const iterationGuide = mode === "incremental"
    ? `\n## 🔄 迭代决策指南\n\n` +
      `面对变化场景，自主判断处理方式：强化（佐证已有洞察）/ 补充（新维度）/ 修正（矛盾）/ 重构（结构调整）/ 不改（无有用新增内容）。\n`
    : "";

  return `# 🧬 Persona Architect - Incremental Evolution Protocol

**⏰ 更新时间**: ${currentTime}
**模式**: ${modeLabel}

请你结合已有的persona.md和新增/变化的block信息深度分析，生成新的persona.md

### 🚫 严格禁止
- **禁止过长**：persona.md内容总长度不要超过2000字符，及时做总结和删除不重要的信息。
- **禁止过度推测**：没提到的信息不要过度臆想导致产生幻觉，特别是在冷启动阶段，要保持克制，如果没有相关信息完全可以不填！
- **禁止使用非场景来源的信息**：Persona 的所有内容必须且只能来自 scene_blocks 中的场景文件。不要从 workspace 目录结构、文件路径、系统信息等技术元数据中提取任何关于用户的个人信息。

---
${triggerSection}
## 📊 统计
- **总记忆数**: ${totalProcessed} 条
- **场景总数**: ${sceneCount} 个
- **变化场景**: ${changedSceneCount} 个（自上次更新后）

---
${changedScenesContent}


${existingPersonaSection}
## ⚙️ 核心运作逻辑 (The Core Logic)

🧠 核心思维引擎：连接与综合 (Connect & Synthesize)
请遵循 "叙事连贯性" 原则处理信息。禁止简单的罗列（No Bullet-point Spamming）。

1. 寻找"贯穿线" (The Connecting Thread)
不要孤立地看信息。要寻找不同领域行为背后的共同逻辑。
** 要保持精简，不过度猜想，如果不确定可以不写 **

执行以下**四层深度扫描**：

### 🟢 Layer 1: 基础锚点 (The Base & Facts) -> 【建立连接】
* **扫描目标**: 确凿的事实、人口统计学特征、当前状态。
* **实用价值**: 为 Agent 提供**破冰话题**和**上下文感知**。

### 🔵 Layer 2: 兴趣图谱 (The Interest Graph) -> 【提供谈资】
* **扫描目标**: 用户投入时间、金钱或注意力的事物。
* **提取原则**: **区分活跃度**（活跃爱好 / 被动消费 / 休眠兴趣）。
* **实用价值**: 让 Agent 能够进行**高质量的闲聊 (Chit-chat)** 和 **生活推荐**。

### 🟡 Layer 3: 交互协议 (The Interface) -> 【消除摩擦】
* **扫描目标**: 用户的沟通习惯、雷区、工作流偏好。
* **实用价值**: 指导 Agent **如何说话、如何交付结果**，避免踩雷。

### 🔴 Layer 4: 认知内核 (The Core) -> 【深度共鸣】
* **扫描目标**: 决策逻辑、矛盾点、终极驱动力。
* **实用价值**: 让 Agent 成为**能够替用户做决策**的"副驾驶"。
${iterationGuide}
---

## 📝 输出模板 (The Persona Template)

请参考以下格式生成 \`persona.md\`，可以做自主调整（信息不足时可以减少或新增chapter）（**必须保持 Markdown 格式**）：

\`\`\`\`markdown
# User Narrative Profile

> **Archetype (核心原型)**: [一句话定义。例如：一位在现实重力下挣扎，但试图通过技术构建理想国的"务实理想主义者"。]

> **基本信息**
（用户的基本信息，如年龄、性别、职业等，更新时若有冲突则覆盖，不冲突尽量叠加）
 -
 -

> **长期偏好**
（你观察到的用户最稳定且可复用的偏好）
    -
    -

## 📖 Chapter 1: Context & Current State (全景语境)
*(将基础事实与当前状态融合，写成一段连贯的背景介绍)*

**[这里写连贯描述，区别较大的时候可以分点阐述]**

## 🎨 Chapter 2: The Texture of Life (生活的肌理)
*(将兴趣、消费、生活习惯串联起来，展示生活品味)*

**[这里写连贯的描述，重点在于"兴趣/偏好"和"品味"的统一性，区别较大的时候可以分点阐述]**

## 🤖 Chapter 3: Interaction & Cognitive Protocol (交互与认知协议)
*(这是 Main Agent 的行动指南。为了实用，这里保持半结构化，但要解释"为什么")*

### 3.1 沟通策略 (How to Speak)
### 3.2 决策逻辑 (How to Think)

## 🧩 Chapter 4: Deep Insights & Evolution (深层洞察与演变)
*(人类学观察笔记)*

* **矛盾统一性**: [描述用户身上看似冲突但实则合理的特质]。
* **演变轨迹**: [可加上时间，分为多点，描述用户最近发生的变化]。
* **涌现特征**: 提炼 3-7 个最核心的特质标签，每个标签单独一行并附上简短注释（10-15字）
  - \`TagName\` - 简短注释说明
\`\`\`\`

---

### ⚠️ 成功标准
- ✅ 基于场景证据生成深度洞察
- ✅ 内容到 Chapter 4 结束（不包含场景导航，工程会自动追加）
- ✅ 必须严格按照上面的模板格式
- ✅ 不要添加场景导航（工程会自动追加）`;
}
