/**
 * Socket 重连相关 Bug 测试脚本
 * 
 * 测试两个问题：
 *   Bug 1: Socket 重连后，badge 数据没变化时仍触发左侧菜单重载（显示 loading）
 *   Bug 2: 初始加载时若 socket 已连接，connection-init listener 未注册，
 *           导致重连后不会重新 subscribe，badge 推送完全收不到
 * 
 * 使用方式：
 *   1. 在审批中心页面（如 /app/approve_workflow/instance_tasks/...）打开浏览器控制台
 *   2. 粘贴本脚本执行，或通过 MCP Chrome evaluate_script 注入
 *   3. 返回 { bug1, bug2 } 测试结果
 * 
 * 预期（修复前）：bug1.passed = false, bug2.passed = false
 * 预期（修复后）：bug1.passed = true,  bug2.passed = true
 */

async function testSocketReconnectBugs() {
  const results = {
    bug1: { name: 'Badge 未变化时不应触发菜单重载', passed: false, detail: '' },
    bug2: { name: '重连后应能收到 badge 推送', passed: false, detail: '' },
  };

  const socket = window.socket;
  if (!socket) {
    results.bug1.detail = results.bug2.detail = 'window.socket 不存在';
    return results;
  }

  // ======== Bug 1 测试 ========
  // 断开 → 重连 → 等待 badge 事件 → 检查是否触发了 approval-tree-menu:reload
  {
    let menuReloadFired = false;
    let badgeReceived = false;

    const onMessage = (event) => {
      const msg = event.data;
      if (msg && msg.type === 'approval-tree-menu:reload') {
        menuReloadFired = true;
      }
    };
    window.addEventListener('message', onMessage);

    const onBadge = () => { badgeReceived = true; };
    socket.on('s:workflow:badge:change', onBadge);

    // 断开并重连
    socket.disconnect();
    await sleep(500);
    socket.connect();

    // 等待重连 + 服务端3秒延迟推送 badge + 1秒余量
    await sleep(5000);

    socket.off('s:workflow:badge:change', onBadge);
    window.removeEventListener('message', onMessage);

    if (!badgeReceived) {
      // 如果连 badge 事件都没收到，说明 Bug 2 存在，Bug 1 无法独立判断
      results.bug1.detail = '未收到 badge 事件（可能因 Bug 2），无法独立判断 Bug 1';
      results.bug1.passed = null; // 未知
    } else if (menuReloadFired) {
      results.bug1.detail = '重连后 badge 数据未变化，但 approval-tree-menu:reload 被触发了（Bug 存在）';
      results.bug1.passed = false;
    } else {
      results.bug1.detail = '重连后 badge 数据未变化，approval-tree-menu:reload 未触发（正常）';
      results.bug1.passed = true;
    }
  }

  // ======== Bug 2 测试 ========
  // 再次断开 → 重连 → 检查是否重新 subscribe 并收到 badge 事件
  {
    let badgeReceived = false;

    const onBadge = () => { badgeReceived = true; };
    socket.on('s:workflow:badge:change', onBadge);

    socket.disconnect();
    await sleep(500);
    socket.connect();

    // 等待重连 + 服务端3秒延迟推送 + 1秒余量
    await sleep(5000);

    socket.off('s:workflow:badge:change', onBadge);

    if (badgeReceived) {
      results.bug2.detail = '重连后成功收到 badge 推送（正常）';
      results.bug2.passed = true;
    } else {
      results.bug2.detail = '重连后未收到 badge 推送，subscribe 可能丢失（Bug 存在）';
      results.bug2.passed = false;
    }
  }

  return results;
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// 导出给 MCP 调用
window._testSocketReconnectBugs = testSocketReconnectBugs;
