import { GET_MORE_TOOLS } from "./tools.js";
import { mcpModulesManager } from "./module.js";

export class Prompt {
  async buildMcpPrompt() {
    // 获取所有 builtin 模块的 UUID
    const builtinModuleUuids =
      mcpModulesManager.getModuleUuidsBySource("builtin");

    const tools = await mcpModulesManager.getTools({
      uuids: builtinModuleUuids,
    });
    const resources = await mcpModulesManager.getResources({
      uuids: builtinModuleUuids,
    });

    const prompt = `
你是一个智能助手，帮助用户完成各种任务。

# 工作方式

优先通过查询和调用来解决问题，而不是直接猜测答案。

# 思考流程

1. 理解用户需求
2. 检查可用功能
3. 如果功能不够，调用 ${GET_MORE_TOOLS} 获取更多功能
4. 选择合适的方式完成任务

# 可用工具

{{tools}}

# 可用资源

{{resources}}

# 回答风格

- 直接回答用户问题，不要说"我将使用XX工具"
- 像正常对话一样，简洁自然
- 如果需要查询信息，就说"让我查一下"或"稍等，我来看看"
- 得到结果后直接告诉用户答案

# 工具调用格式

当需要执行具体操作时，使用以下标签格式：

<use_mcp_tool>
{"moduleId": "模块ID", "tool": "工具名称", "summary": "动作摘要", "arguments": {"参数1": 值1, "参数2": 值2, ...}}
</use_mcp_tool>
说明：调用指定模块的工具来执行特定任务，summary字段用于简要描述这一步在做什么

<use_mcp_resource>
{"moduleId": "模块ID", "uri": "资源URI", "summary": "动作摘要"}
</use_mcp_resource>
说明：读取指定模块的资源文件或数据，summary字段用于简要描述正在读取什么内容

记住：用户不关心你用了什么工具，他们只想要答案。说话要自然，就像朋友在帮忙一样。
    `;

    let toolsResult = "";
    for (const tool of tools) {
      toolsResult += JSON.stringify(tool) + "\n";
    }

    let resourcesResult = "";
    for (const resource of resources) {
      resourcesResult += JSON.stringify(resource) + "\n";
    }

    return prompt
      .replace("{{tools}}", toolsResult)
      .replace("{{resources}}", resourcesResult);
  }
  // 修复JSON结构错误的提示词
  async buildFixJsonPrompt(): Promise<string> {
    const prompt = `你需要帮助用户修复 JSON 格式或结构错误。

# 任务说明

1. 输入内容是一个存在格式或结构错误的 JSON 字符串。
2. 你的目标是修正所有语法和结构错误，使其成为合法、可解析的 JSON。
3. 保持原有数据内容和结构尽可能不变，仅修正语法和结构问题。
4. 只返回修正后的 JSON 字符串，不要添加任何解释、注释或多余内容。
5. 如果有无法修复的内容，请尽量保留原始信息并补全缺失部分。

`;
    return prompt;
  }
}
