/**
 * 环境配置
 * 根据不同环境加载对应的配置文件
 */

// 环境类型
export type EnvType = 'local' | 'dev' | 'test' | 'prod'

// 环境配置接口
export interface EnvConfig {
  // 环境名称
  name: string
  // API基础URL
  apiBaseUrl: string
  // WebSocket URL
  wsBaseUrl: string
  // 文件上传URL
  uploadUrl: string
  // 是否开启调试模式
  debug: boolean
  // 是否开启mock
  mock: boolean
  // 应用标题
  appTitle: string
  // 应用版本
  appVersion: string
}

// 获取当前环境
export const getCurrentEnv = (): EnvType => {
  // 从环境变量获取，默认为local
  const env = import.meta.env.VITE_APP_ENV as EnvType
  return env || 'local'
}

// 获取环境配置
export const getEnvConfig = (): EnvConfig => {
  const env = getCurrentEnv()

  // 调试信息：打印所有环境变量
  console.log('当前环境:', env)
  console.log('所有环境变量:', import.meta.env)

  // 优先使用环境变量，如果没有则使用默认值
  const apiBaseUrl = import.meta.env.VITE_API_BASE_URL
  const wsBaseUrl = import.meta.env.VITE_WS_BASE_URL
  const uploadUrl = import.meta.env.VITE_UPLOAD_URL
  const debug = import.meta.env.VITE_DEBUG === 'true'
  const mock = import.meta.env.VITE_MOCK === 'true'
  const appTitle = import.meta.env.VITE_APP_TITLE
  const appVersion = import.meta.env.VITE_APP_VERSION || '1.0.0'

  console.log('环境变量解析结果:', {
    apiBaseUrl,
    wsBaseUrl,
    uploadUrl,
    debug,
    mock,
    appTitle,
    appVersion
  })

  // 如果环境变量存在，直接使用
  if (apiBaseUrl) {
    return {
      name: getEnvironmentName(env),
      apiBaseUrl,
      wsBaseUrl: wsBaseUrl || apiBaseUrl.replace('http', 'ws').replace('/api', ''),
      uploadUrl: uploadUrl || `${apiBaseUrl}/upload`,
      debug,
      mock,
      appTitle: appTitle || `情绪博物馆 - ${getEnvironmentName(env)}`,
      appVersion
    }
  }

  // 如果没有环境变量，使用默认配置
  switch (env) {
    case 'local':
      return {
        name: '本地环境',
        apiBaseUrl: 'http://localhost:19089/api',
        wsBaseUrl: 'ws://localhost:19089/api',
        uploadUrl: 'http://localhost:19089/api/upload',
        debug: true,
        mock: false,
        appTitle: '情绪博物馆 - 本地',
        appVersion: '1.0.0'
      }

    case 'dev':
      return {
        name: '开发环境',
        apiBaseUrl: 'http://localhost:19089/api',
        wsBaseUrl: 'ws://localhost:19089/api',
        uploadUrl: 'http://localhost:19089/api/upload',
        debug: true,
        mock: false,
        appTitle: '情绪博物馆 - 开发',
        appVersion: '1.0.0'
      }

    case 'test':
      return {
        name: '测试环境',
        apiBaseUrl: 'http://test.emotion-museum.com/api',
        wsBaseUrl: 'ws://test.emotion-museum.com',
        uploadUrl: 'http://test.emotion-museum.com/api/upload',
        debug: false,
        mock: false,
        appTitle: '情绪博物馆 - 测试',
        appVersion: '1.0.0'
      }

    case 'prod':
      return {
        name: '生产环境',
        apiBaseUrl: 'https://api.emotion-museum.com/api',
        wsBaseUrl: 'wss://api.emotion-museum.com',
        uploadUrl: 'https://api.emotion-museum.com/api/upload',
        debug: false,
        mock: false,
        appTitle: '情绪博物馆',
        appVersion: '1.0.0'
      }

    default:
      throw new Error(`未知的环境类型: ${env}`)
  }
}

// 获取环境名称
const getEnvironmentName = (env: EnvType): string => {
  switch (env) {
    case 'local': return '本地环境'
    case 'dev': return '开发环境'
    case 'test': return '测试环境'
    case 'prod': return '生产环境'
    default: return '未知环境'
  }
}

// 导出当前环境配置
export const envConfig = getEnvConfig()

// 导出常用配置
export const {
  apiBaseUrl,
  wsBaseUrl,
  uploadUrl,
  debug,
  mock,
  appTitle,
  appVersion
} = envConfig
