/**
 * Bootstrap 示例
 * 使用 framework.bootstrap() 自动加载 .agent/ 目录配置
 */

const { Framework } = require('../src');
const { z } = require('zod');

async function main() {
  console.log('=== Bootstrap Example ===\n');

  // 创建框架
  const framework = new Framework({ debug: true });

  // 使用 bootstrap 自动加载所有默认插件
  // 会自动检测 .agent/ 目录下的配置
  await framework.bootstrap({
    agentDir: './.agent', // 配置目录
    aiConfig: {
      // 可选：覆盖 AI 配置
      provider: 'deepseek',
      model: 'deepseek-chat',
      apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key',
    },
  });

  // 注册 hello 工具（演示用）
  framework.registerTool({
    name: 'hello',
    description: '打招呼',
    inputSchema: z.object({
      name: z.string().optional().describe('姓名'),
    }),
    execute: async (args) => `Hello, ${args.name || 'World'}!`,
  });

  console.log('\n--- Framework Ready ---');
  console.log(
    'Plugins:',
    framework.pluginManager.getAll().map((p) => p.name)
  );
  console.log(
    'Tools:',
    framework.getTools().map((t) => t.name)
  );

  // 创建 Agent (支持 sharedPrompt 和 metadata)
  const agent = framework.createAgent({
    name: 'MyAgent',
    systemPrompt: '你是一个有帮助的助手。',
    sharedPrompt: '工作目录: {{WORK_DIR}}\n用户名: {{USER_NAME}}\n当前时间: {{TIME}}',
    metadata: {
      projectName: 'Foliko',
      version: '1.0.0',
    },
  });

  console.log('\n--- Agent Context ---');
  console.log(agent.systemPrompt);

  // 测试对话
  console.log('\n--- AI Chat Test ---');
  // try {
  //   const response = await agent.chat('帮我开发一个获取系统信息的插件')
  //   console.log('Agent:', response.message)
  // } catch (err) {
  //   console.error('Chat error:', err.message)
  // }

  try {
    for await (const chunk of agent.chatStream('帮我开发一个获取系统信息的插件')) {
      if (chunk.type === 'text') {
        process.stdout.write(chunk.text);
      } else if (chunk?.type === 'tool-call') {
        console.log(`\n[工具调用: ${chunk.toolName}]`);
      } else if (chunk?.type === 'tool-result') {
        console.log(`\n[工具结果: ${chunk.toolName}]`);
      }
    }
    console.log('\n');
  } catch (err) {
    console.error('[Agent] Stream Error:', err.message);
  }

  // 测试工具调用
  console.log('\n--- Tool Call Test ---');
  const result = await framework.executeTool('hello', { name: 'Bootstrap' });
  console.log('Tool result:', result);

  // 测试内置工具
  console.log('\n--- Built-in Tools Test ---');
  const listResult = await framework.executeTool('list_plugins', {});
  console.log('list_plugins:', listResult);

  // 测试 Web 插件 - 让 LLM 注册路由并测试
  console.log('\n--- Web Plugin Test ---');
  console.log('指示 LLM 注册一个 GET /test 路由...\n');

  try {
    for await (const chunk of agent.chatStream(
      '请帮我注册一个 GET 路由 /test，handler 写：return "1232432"。只调用工具不要解释。'
    )) {
      if (chunk.type === 'text') {
        process.stdout.write(chunk.text);
      } else if (chunk?.type === 'tool-call') {
        console.log(`\n[工具调用: ${chunk.toolName}]`);
      } else if (chunk?.type === 'tool-result') {
        console.log(`\n[工具结果] ${JSON.stringify(chunk.result).substring(0, 200)}...`);
      }
    }
    console.log('\n');
  } catch (err) {
    console.error('[Agent] Web Plugin Test Error:', err.message);
  }

  // 清理
  await framework.destroy();
  console.log('\n[Done]');
}

main().catch(console.error);
