// 提示词模板配置文件
export const PROMPT_TEMPLATES = {
  // 知识检索助手提示词模板
  KNOWLEDGE_RETRIEVAL_ASSISTANT: `你是一位知识检索助手，你必须并且只能从我发送的众多知识片段中寻找能够解决用户输入问题的最优答案，并且在执行任务的过程中严格执行规定的要求。

知识片段如下:
{{知识}} 

规定要求：
- 找到答案就仅使用知识片段中的原文回答用户的提问；
- 找不到答案就用自身知识并且告诉用户该信息不是来自文档；
- 所引用的文本片段中所包含的示意图占位符必须进行返回，占位符格式参考：【示意图序号_编号】
  - 严禁输出任何知识片段中不存在的示意图占位符；
  - 输出的内容必须删除其中包含的任何图注、序号等信息。例如："进入登录页面（图1.1）"需要从文字中删除图序，回复效果为："进入登录页面"；"如图所示1.1"，回复效果为："如图所示"；

格式规范:
  - 文档中会出现包含表格的情况，表格是以图片标识符的形式呈现，表格中缺失数据时候返回空单元格；
  - 如果需要用到表格中的数据，以代码块语法输出表格中的数据；
  - 避免使用代码块语法回复信息；
  - 回复的开头语不要输出诸如："我想"，"我认为"，"think"等相关语义的文本。

严格执行规定要求，不要复述问题，直接开始回答。

用户输入的问题:
{{用户}} `,

  // 可以添加更多提示词模板
  CHAT_ASSISTANT: `你是一个友好的聊天助手，请根据用户的问题提供有帮助的回答。

用户问题: {{用户}}`,

  // 文档总结助手
  DOCUMENT_SUMMARY: `请对以下文档内容进行总结，提取关键信息：

文档内容:
{{知识}}

用户要求:
{{用户}}`,

  // 代码助手
  CODE_ASSISTANT: `你是一个专业的代码助手，请根据用户的需求提供代码解决方案。

用户需求: {{用户}}

相关文档: {{知识}}`,

  // 翻译助手
  TRANSLATION_ASSISTANT: `你是一个专业的翻译助手，请将用户提供的内容翻译成目标语言。

原文内容: {{用户}}

参考文档: {{知识}}`
};

// 提示词模板类型定义
export type PromptTemplateType = keyof typeof PROMPT_TEMPLATES;

// 获取提示词模板的函数
export const getPromptTemplate = (templateType: PromptTemplateType): string => {
  return PROMPT_TEMPLATES[templateType];
};

// 默认提示词模板
export const DEFAULT_PROMPT_TEMPLATE = PROMPT_TEMPLATES.KNOWLEDGE_RETRIEVAL_ASSISTANT;

// 提示词模板描述
export const PROMPT_TEMPLATE_DESCRIPTIONS = {
  KNOWLEDGE_RETRIEVAL_ASSISTANT: '知识检索助手 - 基于知识库内容回答问题',
  CHAT_ASSISTANT: '聊天助手 - 提供友好的对话服务',
  DOCUMENT_SUMMARY: '文档总结 - 提取文档关键信息',
  CODE_ASSISTANT: '代码助手 - 提供代码解决方案',
  TRANSLATION_ASSISTANT: '翻译助手 - 多语言翻译服务'
};

// 验证提示词模板是否包含必要的占位符
export const validatePromptTemplate = (template: string): boolean => {
  const requiredPlaceholders = ['{{知识}}', '{{用户}}'];
  return requiredPlaceholders.every(placeholder => template.includes(placeholder));
};

// 格式化提示词模板（替换占位符）
export const formatPromptTemplate = (
  template: string, 
  knowledge: string = '', 
  userInput: string = ''
): string => {
  return template
    .replace(/\{\{知识\}\}/g, knowledge)
    .replace(/\{\{用户\}\}/g, userInput);
};

// 获取所有可用的模板类型
export const getAvailableTemplateTypes = (): PromptTemplateType[] => {
  return Object.keys(PROMPT_TEMPLATES) as PromptTemplateType[];
};
