/**
 * Exit Plan Mode Tool
 *
 * 退出计划模式，将方案提交给用户审批。
 * 参考 Claude Code 的 ExitPlanMode 实现。
 *
 * 使用条件：
 * 1. 已将计划写入计划文件
 * 2. 计划清晰无歧义
 * 3. 如有多种方案或不明确的需求，先用 AskUserQuestion 澄清
 *
 * 可选参数：
 * - launchSwarm: 是否启动多代理协作来实施方案
 * - teammateCount: 协作代理的数量
 */

import type { ToolWithMetadata } from '../types.js';
import type { ToolResult } from '../../types/index.js';

/**
 * 工具参数
 */
export interface ExitPlanModeParams {
  /** 是否启动 swarm 来实施方案 */
  launchSwarm?: boolean;
  /** swarm 中的队友数量 */
  teammateCount?: number;
}

/**
 * Exit Plan Mode 工具
 */
export const exitPlanModeTool: ToolWithMetadata = {
  name: 'exit_plan_mode',
  description: `退出计划模式，将方案提交给用户审批。

使用条件（调用前必须满足）：
1. 已完成方案设计
2. 计划清晰无歧义
3. 如有多种方案或不明确的需求，先用 ask_user_question 澄清

何时使用：
- 当任务需要规划实现步骤并编写代码时使用
- 纯研究/探索任务不要使用此工具

参数说明：
- launchSwarm (可选): 是否启动多代理协作来实施方案
- teammateCount (可选): 协作代理的数量（需要 launchSwarm=true）

示例：
1. 简单退出（用户手动执行）:
   exit_plan_mode({})

2. 启动 swarm 协作实施:
   exit_plan_mode({
     launchSwarm: true,
     teammateCount: 3
   })`,

  metadata: {
    name: 'exit_plan_mode',
    category: 'agent',
    description: '退出计划模式，提交方案供用户审批',
    keywords: ['plan', 'mode', 'exit', 'submit', '计划', '模式', '退出', '提交', '审批'],
    deferLoading: true, // 仅 Plan 模式下可用
  },

  parameters: {
    launchSwarm: {
      type: 'boolean',
      description: '是否启动多代理协作来实施方案',
      required: false,
    },
    teammateCount: {
      type: 'number',
      description: '协作代理的数量（需要 launchSwarm=true）',
      required: false,
    },
  },

  async execute(params: Record<string, unknown>): Promise<ToolResult> {
    const launchSwarm = params.launchSwarm as boolean | undefined;
    const teammateCount = params.teammateCount as number | undefined;

    // 验证参数
    if (teammateCount !== undefined) {
      if (typeof teammateCount !== 'number' || teammateCount < 1) {
        return {
          success: false,
          output: '',
          error: 'teammateCount 必须是大于 0 的数字',
        };
      }
      if (!launchSwarm) {
        return {
          success: false,
          output: '',
          error: '使用 teammateCount 时需要设置 launchSwarm: true',
        };
      }
    }

    // 构建输出
    const output: string[] = ['计划模式已结束，方案已提交审批。'];

    if (launchSwarm) {
      const count = teammateCount ?? 2;
      output.push('');
      output.push(`配置: 启动 Swarm 协作模式，${count} 个代理将并行实施方案。`);
    }

    return {
      success: true,
      output: output.join('\n'),
      metadata: {
        type: 'exit_plan_mode',
        // 标记模式切换
        modeTransition: {
          from: 'plan',
          to: 'act',
        },
        // Swarm 配置
        swarm: launchSwarm
          ? {
              enabled: true,
              teammateCount: teammateCount ?? 2,
            }
          : {
              enabled: false,
            },
        // 标记需要用户审批
        requiresApproval: true,
      },
    };
  },
};
