/**
 * 内置 Skills
 *
 * 提供一些常用的预定义 Skills
 */

import type { Skill } from '../types.js';

/**
 * 代码审查 Skill
 */
export const codeReviewSkill: Skill = {
  name: 'code-review',
  displayName: '代码审查',
  description: '对代码进行全面审查，检查潜在问题、最佳实践和改进建议',
  category: 'development',
  promptTemplate: `请对以下代码进行全面审查：

{{code}}

审查重点：
{{#if focus}}
- {{focus}}
{{else}}
- 代码质量和可读性
- 潜在的 bug 和错误
- 性能问题
- 安全隐患
- 最佳实践遵循情况
{{/if}}

请提供：
1. 发现的问题列表（按严重程度排序）
2. 具体的改进建议
3. 代码中做得好的地方`,
  parameters: {
    code: {
      type: 'string',
      description: '要审查的代码',
      required: true,
    },
    focus: {
      type: 'string',
      description: '审查重点（可选）',
      required: false,
    },
  },
  keywords: ['review', 'code', 'quality', '审查', '代码', '质量'],
  source: 'builtin',
  enabled: true,
};

/**
 * 代码解释 Skill
 */
export const explainCodeSkill: Skill = {
  name: 'explain-code',
  displayName: '代码解释',
  description: '详细解释代码的功能、逻辑和工作原理',
  category: 'development',
  promptTemplate: `请详细解释以下代码：

{{code}}

{{#if level}}
解释级别：{{level}}
{{/if}}

请包含：
1. 代码的整体功能
2. 主要逻辑流程
3. 关键部分的详细解释
4. 使用的设计模式或技术（如果有）`,
  parameters: {
    code: {
      type: 'string',
      description: '要解释的代码',
      required: true,
    },
    level: {
      type: 'string',
      description: '解释级别（beginner/intermediate/advanced）',
      required: false,
      enum: ['beginner', 'intermediate', 'advanced'],
      default: 'intermediate',
    },
  },
  keywords: ['explain', 'code', 'understand', '解释', '理解', '说明'],
  source: 'builtin',
  enabled: true,
};

/**
 * 文档生成 Skill
 */
export const generateDocsSkill: Skill = {
  name: 'generate-docs',
  displayName: '文档生成',
  description: '为代码生成文档注释或 README',
  category: 'documentation',
  promptTemplate: `请为以下代码生成{{type}}：

{{code}}

{{#if style}}
文档风格：{{style}}
{{/if}}

要求：
- 清晰描述功能和用途
- 说明参数和返回值（如果适用）
- 提供使用示例
- 使用规范的格式`,
  parameters: {
    code: {
      type: 'string',
      description: '要生成文档的代码',
      required: true,
    },
    type: {
      type: 'string',
      description: '文档类型',
      required: false,
      enum: ['JSDoc', 'TSDoc', 'README', '注释', 'API文档'],
      default: '文档注释',
    },
    style: {
      type: 'string',
      description: '文档风格（简洁/详细）',
      required: false,
    },
  },
  keywords: ['docs', 'documentation', 'jsdoc', '文档', '注释', '说明'],
  source: 'builtin',
  enabled: true,
};

/**
 * 单元测试生成 Skill
 */
export const generateTestsSkill: Skill = {
  name: 'generate-tests',
  displayName: '测试生成',
  description: '为代码生成单元测试',
  category: 'testing',
  promptTemplate: `请为以下代码生成单元测试：

{{code}}

测试框架：{{framework}}

要求：
- 覆盖主要功能路径
- 包含边界条件测试
- 包含错误处理测试
- 使用清晰的测试描述
- 遵循 AAA 模式（Arrange-Act-Assert）`,
  parameters: {
    code: {
      type: 'string',
      description: '要测试的代码',
      required: true,
    },
    framework: {
      type: 'string',
      description: '测试框架',
      required: false,
      enum: ['vitest', 'jest', 'mocha', 'pytest', 'unittest'],
      default: 'vitest',
    },
  },
  keywords: ['test', 'unit', 'testing', '测试', '单元测试', 'vitest', 'jest'],
  source: 'builtin',
  enabled: true,
};

/**
 * 重构建议 Skill
 */
export const refactorSuggestSkill: Skill = {
  name: 'refactor-suggest',
  displayName: '重构建议',
  description: '分析代码并提供重构建议',
  category: 'development',
  promptTemplate: `请分析以下代码并提供重构建议：

{{code}}

{{#if goal}}
重构目标：{{goal}}
{{/if}}

请提供：
1. 当前代码的问题分析
2. 具体的重构建议
3. 重构后的代码示例
4. 重构的好处说明`,
  parameters: {
    code: {
      type: 'string',
      description: '要重构的代码',
      required: true,
    },
    goal: {
      type: 'string',
      description: '重构目标（如：提高可读性、优化性能、减少重复）',
      required: false,
    },
  },
  keywords: ['refactor', 'improve', 'optimize', '重构', '优化', '改进'],
  source: 'builtin',
  enabled: true,
};

/**
 * Bug 修复 Skill
 */
export const fixBugSkill: Skill = {
  name: 'fix-bug',
  displayName: 'Bug 修复',
  description: '分析代码问题并提供修复方案',
  category: 'debugging',
  promptTemplate: `请分析以下代码中的问题并提供修复方案：

代码：
{{code}}

{{#if error}}
错误信息：
{{error}}
{{/if}}

{{#if context}}
上下文：
{{context}}
{{/if}}

请提供：
1. 问题的根本原因分析
2. 修复方案
3. 修复后的代码
4. 如何避免类似问题的建议`,
  parameters: {
    code: {
      type: 'string',
      description: '有问题的代码',
      required: true,
    },
    error: {
      type: 'string',
      description: '错误信息',
      required: false,
    },
    context: {
      type: 'string',
      description: '额外的上下文信息',
      required: false,
    },
  },
  keywords: ['bug', 'fix', 'debug', 'error', '修复', '错误', '调试'],
  source: 'builtin',
  enabled: true,
};

/**
 * Git Commit 消息生成 Skill
 */
export const gitCommitSkill: Skill = {
  name: 'git-commit',
  displayName: 'Git Commit',
  description: '根据代码变更生成规范的 Git commit 消息',
  category: 'git',
  promptTemplate: `请根据以下代码变更生成规范的 Git commit 消息：

变更内容：
{{diff}}

{{#if type}}
Commit 类型：{{type}}
{{/if}}

要求：
- 遵循 Conventional Commits 规范
- 第一行不超过 50 个字符
- 清晰描述变更的目的
- 如果有 breaking changes，请说明`,
  parameters: {
    diff: {
      type: 'string',
      description: 'Git diff 内容或变更描述',
      required: true,
    },
    type: {
      type: 'string',
      description: 'Commit 类型',
      required: false,
      enum: ['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore'],
    },
  },
  keywords: ['git', 'commit', 'message', '提交', '消息'],
  source: 'builtin',
  enabled: true,
};

/**
 * API 设计 Skill
 */
export const apiDesignSkill: Skill = {
  name: 'api-design',
  displayName: 'API 设计',
  description: '设计 RESTful API 接口',
  category: 'architecture',
  promptTemplate: `请为以下需求设计 RESTful API：

需求描述：
{{requirement}}

{{#if constraints}}
约束条件：
{{constraints}}
{{/if}}

请提供：
1. API 端点设计（路径、方法、参数）
2. 请求/响应格式（JSON 示例）
3. 错误处理方案
4. 认证/授权建议（如果需要）`,
  parameters: {
    requirement: {
      type: 'string',
      description: 'API 需求描述',
      required: true,
    },
    constraints: {
      type: 'string',
      description: '设计约束（如：现有系统兼容性、性能要求等）',
      required: false,
    },
  },
  keywords: ['api', 'rest', 'design', 'endpoint', 'API', '接口', '设计'],
  source: 'builtin',
  enabled: true,
};

/**
 * 所有内置 Skills
 */
export const builtinSkills: Skill[] = [
  codeReviewSkill,
  explainCodeSkill,
  generateDocsSkill,
  generateTestsSkill,
  refactorSuggestSkill,
  fixBugSkill,
  gitCommitSkill,
  apiDesignSkill,
];
