/**
 * API路由配置管理器
 * 支持多域名路由和前缀替换功能
 */
import { baseURL } from './index';

class ApiRoutingManager {
  constructor() {
    // 功能开关
    this.enabled = import.meta.env.SHEEP_API_ROUTING_ENABLED === 'true';

    // 模块配置映射
    this.moduleConfigs = {
      '/mall': {
        baseUrl: import.meta.env.SHEEP_API_MALL_BASE_URL,
        prefix: import.meta.env.SHEEP_API_MALL_PREFIX,
      },
      '/cif': {
        baseUrl: import.meta.env.SHEEP_API_CIF_BASE_URL,
        prefix: import.meta.env.SHEEP_API_CIF_PREFIX,
      },
      '/operating': {
        baseUrl: import.meta.env.SHEEP_API_OPERATING_BASE_URL,
        prefix: import.meta.env.SHEEP_API_OPERATING_PREFIX,
      },
    };

    // 通用接口配置（没有特定前缀的接口）
    this.commonConfig = {
      baseUrl: import.meta.env.SHEEP_API_COMMON_BASE_URL,
      prefix: import.meta.env.SHEEP_API_COMMON_PREFIX,
    };

    // 兜底域名
    this.fallbackBaseUrl = import.meta.env.SHEEP_API_FALLBACK_BASE_URL || baseURL;

    // 检查是否启用了代理
    this.useProxy = import.meta.env.SHEEP_USE_PROXY === 'true';
    this.proxyTarget = import.meta.env.SHEEP_PROXY_TARGET;
  }

  /**
   * 处理请求配置
   * @param {Object} config - axios请求配置
   * @returns {Object} 处理后的配置
   */
  processRequest(config) {
    // 添加调试日志

    // 如果启用了代理，直接返回原始配置，让Vite代理处理
    if (this.useProxy && this.proxyTarget) {
      // 当使用代理时，baseURL应该为空或者使用相对路径，让Vite代理处理
      const processedConfig = {
        ...config,
        baseURL: import.meta.env.SHEEP_PROXY_PREFIX,
        url: config.url.startsWith('/') ? config.url : '/' + config.url,
      };
      return processedConfig;
    }

    if (!this.enabled) {
      console.log('API路由系统未启用');
      return config;
    }

    const originalUrl = config.url;
    let processedUrl = originalUrl;
    let targetBaseUrl = this.fallbackBaseUrl;
    let matchedModule = null;

    // 标准化URL（确保以/开头）
    const normalizedUrl = originalUrl.startsWith('/') ? originalUrl : `/${originalUrl}`;

    // 查找匹配的模块配置
    for (const [modulePrefix, moduleConfig] of Object.entries(this.moduleConfigs)) {
      if (normalizedUrl.startsWith(modulePrefix)) {
        matchedModule = modulePrefix;
        // 设置目标域名
        targetBaseUrl = moduleConfig.baseUrl || this.fallbackBaseUrl;

        // 处理前缀替换
        if (moduleConfig.prefix) {
          processedUrl = normalizedUrl.replace(modulePrefix, `/${moduleConfig.prefix}`);
        } else {
          processedUrl = normalizedUrl;
        }

        break;
      }
    }

    // 如果没有匹配到特定模块，检查是否配置了通用接口
    if (!matchedModule && this.commonConfig.baseUrl) {
      targetBaseUrl = this.commonConfig.baseUrl;

      // 处理通用接口前缀替换
      if (this.commonConfig.prefix) {
        processedUrl = `/${this.commonConfig.prefix}${normalizedUrl}`;
      } else {
        processedUrl = normalizedUrl;
      }

      matchedModule = 'common';
    }

    const result = {
      ...config,
      url: processedUrl,
      baseURL: targetBaseUrl,
    };

    // 添加调试日志

    return result;
  }
}

// 导出单例实例
export const apiRouting = new ApiRoutingManager();
export default apiRouting;
