/**
 * MSW Mock 服务配置
 */
import { setupWorker } from 'msw/browser';
import { handlers } from './handlers/index.js';

// 创建 MSW Worker
export const worker = setupWorker(...handlers);

/**
 * 启动 Mock 服务
 * @param {Object} options 配置选项
 * @returns {Promise}
 */
export const startMocking = async (options = {}) => {
  const defaultOptions = {
    onUnhandledRequest: 'bypass', // 未处理的请求直接通过
    quiet: false, // 是否静默模式
    ...options,
  };

  // 只在开发环境启动
  if (process.env.NODE_ENV === 'development') {
    try {
      await worker.start(defaultOptions);

      if (!defaultOptions.quiet) {
        console.log('🚀 [MSW] Mock 服务已启动');
        console.log('📋 [MSW] 已注册的接口数量:', handlers.length);
      }

      return true;
    } catch (error) {
      console.error('❌ [MSW] Mock 服务启动失败:', error);
      return false;
    }
  }

  return false;
};

/**
 * 停止 Mock 服务
 */
export const stopMocking = () => {
  worker.stop();
  console.log('🛑 [MSW] Mock 服务已停止');
};

/**
 * 重置 Mock 服务
 */
export const resetMocking = () => {
  worker.resetHandlers();
  console.log('🔄 [MSW] Mock 服务已重置');
};

/**
 * 动态添加处理器
 * @param {Array} newHandlers 新的处理器
 */
export const addHandlers = (newHandlers) => {
  worker.use(...newHandlers);
  console.log(`➕ [MSW] 已添加 ${newHandlers.length} 个新处理器`);
};

// 开发环境下挂载到 window 对象，方便调试
if (process.env.NODE_ENV === 'development') {
  window.mockService = {
    start: startMocking,
    stop: stopMocking,
    reset: resetMocking,
    addHandlers,
    worker,
  };
}
