/**
 * 模拟微信持续聊天场景
 * 测试多轮对话后 result.message 是否为空
 */

const { Framework } = require('../src');
const AIPlugin = require('../plugins/ai-plugin');
const SessionPlugin = require('../plugins/session-plugin');
require('dotenv').config();

async function main() {
  console.log('=== 模拟微信持续聊天场景 ===\n');

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

  await framework.loadPlugin(
    new AIPlugin({
      provider: 'minimax',
      model: 'MiniMax-M2.7',
      apiKey: process.env.MINIMAX_API_KEY || 'your-api-key',
    })
  );

  // 加载 session 插件
  await framework.loadPlugin(new SessionPlugin());

  // 模拟微信的 system prompt
  const systemPrompt = `你是一个微信助手。`;

  // 创建 Agent（模拟 _getSessionAgent）
  const agent = framework.createAgent({
    name: 'WeixinAgent',
    systemPrompt: systemPrompt,
  });

  // 模拟 session
  const sessionPlugin = framework.pluginManager.get('session');
  const sessionId = 'weixin_test_user';

  // 初始化 session
  sessionPlugin.getOrCreateSession(sessionId, {
    metadata: { platform: 'weixin', userId: 'test_user' },
  });

  // 模拟微信的 _processChat
  const processChat = async (userId, text) => {
    console.log(`\n[User] ${text}`);

    try {
      const result = await agent.chat(text, { sessionId: `weixin_${userId}` });
      const message = result.message || '';

      if (message) {
        console.log(`[Agent] ${message.substring(0, 100)}${message.length > 100 ? '...' : ''}`);
        console.log(`[OK] message length: ${message.length}`);
      } else {
        console.log(`[WARNING] result.message is empty!`);
        console.log(`[DEBUG] result:`, JSON.stringify(result, null, 2).substring(0, 500));
      }

      // 检查 _messages 状态
      const chatHandler = agent._chatHandler;
      if (chatHandler) {
        console.log(`[DEBUG] _messages count: ${chatHandler._messages.length}`);
      }

      return message;
    } catch (err) {
      console.error(`[Error]`, err.message);
      return '';
    }
  };

  // 模拟多轮对话
  await processChat('user1', '你好');
  await processChat('user1', '今天天气怎么样？');
  await processChat('user1', '帮我查一下北京的人口');
  await processChat('user1', '再说一次北京的人口');

  console.log('\n--- 测试压缩场景 ---');
  // 发送更多消息触发压缩
  for (let i = 0; i < 5; i++) {
    await processChat('user1', `这是第 ${i + 1} 条测试消息`);
  }

  // 压缩后再发送一条
  await processChat('user1', '你好，你还记得我吗？');

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

main().catch(console.error);
