import { useEffect } from 'react';
import { GLOBAL_REFRESH_EVENT } from '../App';

// 添加全局事件计数器来跟踪刷新频率
let globalEventCount = 0;
let lastEventTime = Date.now();

/**
 * 全局刷新Hook，用于旧组件快速添加刷新功能
 * 
 * @param callback 刷新回调函数
 * @param moduleCodeFilter 可选参数，只有当事件detail中的moduleCode匹配时才执行回调
 */
const useGlobalRefresh = (
  callback: () => void,
  moduleCodeFilter?: string
) => {
  useEffect(() => {
    const handleRefresh = (event: Event) => {
      const customEvent = event as CustomEvent;
      const detail = customEvent.detail || {};
      
      // 全局事件统计
      const now = Date.now();
      const timeSinceLastEvent = now - lastEventTime;
      globalEventCount++;
      console.log(`📊 全局刷新事件统计: 第${globalEventCount}次事件, 距离上次事件${timeSinceLastEvent}ms, moduleCode: ${detail.moduleCode || '无'}`);
      lastEventTime = now;
      
      // 如果指定了模块代码过滤器
      if (moduleCodeFilter) {
        // 只有当事件的moduleCode与过滤器匹配时才执行
        if (detail.moduleCode === moduleCodeFilter) {
          console.log(`✅ 模块(code: ${moduleCodeFilter})收到匹配的刷新信号`);
          if (moduleCodeFilter === '22') {
            console.log('🎯 模块22（患者取药时间）正在执行刷新回调');
          }
          callback();
        } else {
          // 忽略不匹配的模块刷新事件和无moduleCode的全局事件
          if (detail.moduleCode) {
            if (moduleCodeFilter === '22') {
              console.log(`🔇 模块22忽略其他模块(${detail.moduleCode})的刷新信号`);
            }
          } else {
            if (moduleCodeFilter === '22') {
              console.log(`🔇 模块22忽略无模块代码的全局刷新信号`);
            }
          }
        }
      } else {
        // 如果没有指定模块代码过滤器，只响应无moduleCode的全局事件
        if (!detail.moduleCode) {
          console.log('✅ 组件收到全局刷新信号');
          callback();
        } else {
          console.log(`🔇 组件未指定模块代码，忽略特定模块(${detail.moduleCode})的刷新信号`);
        }
      }
    };
    
    if (moduleCodeFilter === '22') {
      console.log('🎯 模块22（患者取药时间）已注册刷新监听器');
    }
    
    // 添加事件监听
    window.addEventListener(GLOBAL_REFRESH_EVENT, handleRefresh);
    
    // 组件卸载时移除事件监听
    return () => {
      if (moduleCodeFilter === '22') {
        console.log('🧹 模块22（患者取药时间）移除刷新监听器');
      }
      window.removeEventListener(GLOBAL_REFRESH_EVENT, handleRefresh);
    };
  }, [callback, moduleCodeFilter]);
};

export default useGlobalRefresh; 