/**
 * @description Platform 应用运行时配置
 * @author yslg
 * @since 2025-12-06
 * 
 * 配置加载策略：
 * 1. 开发环境：使用下面定义的开发配置
 * 2. 生产环境：从 window.APP_RUNTIME_CONFIG 读取（来自 app-config.js）
 * 3. Docker部署：替换 app-config.js 文件实现配置外挂
 * 
 * 配置结构说明：
 * 此文件的配置结构与 app-config.js 完全对应
 * 修改 app-config.js 后，这里的配置会自动应用
 */

// ============================================
// AES 加密密钥
// ============================================
/**
 * AES 加密密钥（与后端保持一致）
 * 对应后端配置：security.aes.secret-key
 * Base64 编码的 32 字节密钥（256 位）
 */
export const AES_SECRET_KEY = 'MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI='  // Base64 编码，解码后是 "12345678901234567890123456789012" (32字节)

// ============================================
// 类型定义
// ============================================
export interface AppRuntimeConfig {
  env?: string;
  api: {
    baseUrl: string;
    timeout: number;
  };
  baseUrl: string;
  file: {
    downloadUrl: string;
    uploadUrl: string;
    maxSize: {
      image: number;
      video: number;
      document: number;
    };
    acceptTypes: {
      image: string;
      video: string;
      document: string;
    };
  };
  token: {
    key: string;
    refreshThreshold: number;
  };
  publicImgPath: string;
  publicWebPath: string;
  // 单点登录配置
  sso?: {
    platformUrl: string;  // platform 平台地址
    workcaseUrl: string;  // workcase 服务地址
    biddingUrl: string;   // bidding 服务地址
  };
  features?: {
    enableDebug?: boolean;
    enableMockData?: boolean;
    [key: string]: any;
  };
}

// ============================================
// 配置定义（与 app-config.js 结构一致）
// ============================================
const isDev = (import.meta as any).env?.DEV ?? false;

// 开发环境配置
const devConfig: AppRuntimeConfig = {
  env: 'development',

  api: {
    // 开发环境通过 Vite 代理转发到后端，避免浏览器直接跨域
    // 实际请求路径示例：/api/... → 由代理转发到实际后端
    baseUrl: '/api',
    timeout: 30000
  },

  baseUrl: '/',

  file: {
    // 通过 Nginx → Gateway 访问文件服务，使用 /urban-lifeline 前缀
    downloadUrl: '/api/urban-lifeline/file/download/',
    uploadUrl: '/api/urban-lifeline/file/upload',
    maxSize: {
      image: 5,
      video: 100,
      document: 10
    },
    acceptTypes: {
      image: 'image/*',
      video: 'video/*',
      document: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
    }
  },

  token: {
    key: 'token',
    refreshThreshold: 300000
  },

  publicImgPath: 'http://localhost:7001/img',
  publicWebPath: 'http://localhost:7001',

  // 单点登录配置
  sso: {
    platformUrl: '/',            // 通过nginx访问platform
    workcaseUrl: '/workcase',    // 通过nginx访问workcase
    biddingUrl: '/bidding'       // 通过nginx访问bidding
  },

  features: {
    enableDebug: true,
    enableMockData: false
  }
};

// 生产环境默认配置（兜底）
const prodDefaultConfig: AppRuntimeConfig = {
  env: 'production',

  api: {
    baseUrl: '/api',
    timeout: 30000
  },

  baseUrl: '/',

  file: {
    downloadUrl: '/api/urban-lifeline/file/download/',
    uploadUrl: '/api/urban-lifeline/file/upload',
    maxSize: {
      image: 5,
      video: 100,
      document: 10
    },
    acceptTypes: {
      image: 'image/*',
      video: 'video/*',
      document: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
    }
  },

  token: {
    key: 'token',
    refreshThreshold: 300000
  },

  publicImgPath: '/img',
  publicWebPath: '/',

  // 单点登录配置（生产环境通过nginx代理）
  sso: {
    platformUrl: '/',
    workcaseUrl: '/workcase',
    biddingUrl: '/bidding'
  },

  features: {
    enableDebug: false,
    enableMockData: false
  }
};

// ============================================
// 配置加载
// ============================================

/**
 * 获取运行时配置
 * 生产环境优先从 window.APP_RUNTIME_CONFIG 读取（app-config.js 注入）
 */
const getRuntimeConfig = (): AppRuntimeConfig => {
  if (isDev) {
    console.log('[配置] 开发环境，使用内置配置');
    return devConfig;
  }

  // 生产环境：尝试读取外部配置
  try {
    const runtimeConfig = (window as any).APP_RUNTIME_CONFIG;
    if (runtimeConfig && typeof runtimeConfig === 'object') {
      console.log('[配置] 加载外部配置 app-config.js');
      console.log('[配置] API地址:', runtimeConfig.api?.baseUrl);
      console.log('[配置] 环境:', runtimeConfig.env || 'production');
      return runtimeConfig as AppRuntimeConfig;
    }
  } catch (e) {
    console.warn('[配置] 无法读取外部配置，使用默认配置', e);
  }

  console.log('[配置] 使用默认生产配置');
  return prodDefaultConfig;
};

// 当前应用配置
const config = getRuntimeConfig();
console.log('[配置] 当前配置', config);

// ============================================
// 导出配置（向后兼容）
// ============================================

// 单独导出常用配置项
export const API_BASE_URL = config.api.baseUrl;
export const FILE_DOWNLOAD_URL = config.file.downloadUrl;
export const PUBLIC_IMG_PATH = config.publicImgPath;
export const PUBLIC_WEB_PATH = config.publicWebPath;

// 导出完整配置对象
export const APP_CONFIG = {
  // 应用标题
  title: '泰豪电源 AI 数智化平台',
  name: '泰豪电源 AI 数智化平台',
  version: '1.0.0',
  copyright: '泰豪电源',

  // 环境标识
  env: config.env || 'production',

  // 应用基础路径
  baseUrl: config.baseUrl,

  // API 配置
  api: {
    baseUrl: config.api.baseUrl,
    timeout: config.api.timeout
  },

  // 文件配置
  file: {
    downloadUrl: config.file.downloadUrl,
    uploadUrl: config.file.uploadUrl,
    maxSize: config.file.maxSize,
    acceptTypes: config.file.acceptTypes
  },

  // Token 配置
  token: {
    key: config.token.key,
    refreshThreshold: config.token.refreshThreshold
  },

  // 公共路径
  publicImgPath: config.publicImgPath,
  publicWebPath: config.publicWebPath,

  // 单点登录配置
  sso: config.sso || {
    platformUrl: '/',
    workcaseUrl: '/workcase',
    biddingUrl: '/bidding'
  },

  // 功能开关
  features: config.features || {}
};

// 默认导出
export default APP_CONFIG;
