/**
 * 微信/飞书插件测试
 * 测试 chat() 方法（非流式）
 */

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

async function main() {
  console.log('=== Weixin/Feishu Plugin Test ===\n');

  const framework = new Framework({ debug: true });

  // Bootstrap 加载默认插件
  await framework.bootstrap({
    agentDir: './.agent',
    aiConfig: {
      provider: 'deepseek',
      model: 'deepseek-chat',
      apiKey: process.env.DEEPSEEK_API_KEY || 'your-api-key',
    },
  });

  // 加载微信插件
  const { WeixinPlugin } = require('../plugins/weixin-plugin');
  const weixinPlugin = new WeixinPlugin({
    forceLogin: false,
    allowedUsers: [], // 空数组表示允许所有人
  });

  // 加载飞书插件
  const { FeishuPlugin } = require('../plugins/feishu-plugin');
  const feishuPlugin = new FeishuPlugin({
    // appId: 'your-app-id',
    // appSecret: 'your-app-secret',
    allowedUsers: [],
  });

  // 注册插件（不自动加载）
  // framework.registerPlugin(weixinPlugin)
  // framework.registerPlugin(feishuPlugin)

  console.log('\n--- Plugins Registered ---');
  console.log(
    'Plugins:',
    framework.pluginManager.getAll().map((p) => p.name)
  );

  // 创建测试 Agent
  const agent = framework.createAgent({
    name: 'TestAgent',
    systemPrompt: '你是一个测试助手，回复要简洁。',
  });

  // 测试 chat() 方法（模拟消息处理）
  console.log('\n--- Test chat() method ---');

  // 模拟飞书的消息处理流程
  const mockOpenId = 'test_user_001';
  const mockText = '你好，请介绍一下你自己';

  // 获取 session agent（内部逻辑）
  const sessionInfo = {
    agent: framework.createSessionAgent(`test_${mockOpenId}`, {
      systemPrompt: feishuPlugin.systemPrompt,
    }),
    sessionId: `test_${mockOpenId}`,
  };

  try {
    // 使用 chat() 而非 chatStream()
    const result = await sessionInfo.agent.chat(mockText, {
      sessionId: sessionInfo.sessionId,
    });

    console.log('Result:', result);
    console.log('Message:', result.message);
    console.log('StepCount:', result.stepCount);
  } catch (err) {
    console.error('Chat error:', err.message);
  }

  // 测试 chatStream() 对比
  console.log('\n--- Test chatStream() for comparison ---');
  try {
    let fullResponse = '';
    for await (const chunk of sessionInfo.agent.chatStream('今天天气怎么样？', {
      sessionId: sessionInfo.sessionId,
    })) {
      if (chunk.type === 'text' && chunk.text) {
        fullResponse += chunk.text;
      }
    }
    console.log('Stream result:', fullResponse);
  } catch (err) {
    console.error('Stream error:', err.message);
  }

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

main().catch(console.error);
