/**
 * 基础示例
 * 展示如何使用 Framework 和 Agent
 */

const { Framework } = require('../src');
const AIPlugin = require('../plugins/ai-plugin');
const { z } = require('zod');

async function main() {
  // 创建框架实例
  const framework = new Framework({ debug: true });

  // 加载 AI 插件
  await framework.loadPlugin(
    new AIPlugin({
      provider: 'deepseek',
      model: 'deepseek-chat',
      apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key',
    })
  );

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

  // 注册计算器工具
  framework.registerTool({
    name: 'calculate',
    description: '简单的计算器',
    inputSchema: z.object({
      expression: z.string().describe('数学表达式，如 2+3*4'),
    }),
    execute: async (args) => {
      try {
        // 安全计算（仅支持基本运算）
        const result = Function(`"use strict"; return (${args.expression})`)();
        return { result };
      } catch (e) {
        return { error: e.message };
      }
    },
  });

  console.log('[Framework] Ready!');
  console.log(
    '[Tools]',
    framework.getTools().map((t) => t.name)
  );

  // 创建 Agent
  const agent = framework.createAgent({
    name: 'MyAgent',
    systemPrompt: '你是一个有帮助的助手。当需要计算时，使用 calculate 工具。',
  });

  // 监听事件
  agent.on('tool-call', (tool) => {
    console.log('[Agent] Tool call:', tool.name, tool.args);
  });

  agent.on('tool-result', (result) => {
    console.log('[Agent] Tool result:', result.name, result.result);
  });

  // AI 对话示例
  console.log('\n=== AI Chat Example ===');
  try {
    const response = await agent.chat('你好！');
    console.log('[Agent] Response:', response.message);
  } catch (err) {
    console.error('[Agent] Error:', err.message);
  }

  // 使用工具的对话示例
  console.log('\n=== AI Chat with Tool Call ===');
  try {
    const response = await agent.chat('请帮我计算 (15 + 25) * 2 等于多少？');
    console.log('[Agent] Response:', response.message);
  } catch (err) {
    console.error('[Agent] Error:', err.message);
  }

  // 流式对话示例
  console.log('\n=== Streaming Chat ===');
  try {
    for await (const chunk of agent.chatStream('请用中文介绍一下你自己')) {
      if (chunk.type === 'text') {
        process.stdout.write(chunk.text);
      }
    }
    console.log('\n');
  } catch (err) {
    console.error('[Agent] Stream Error:', err.message);
  }

  // 热重载示例
  console.log('\n=== Hot Reload ===');
  await framework.reloadPlugin('ai');
  console.log('AI plugin reloaded!');

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

main().catch(console.error);
