/**
 * 简化版连接配置 Mock API
 */

// 模拟延迟
const delay = (min = 300, max = 600) => {
  const time = Math.random() * (max - min) + min
  return new Promise(resolve => setTimeout(resolve, time))
}

// 模拟配置数据
const mockConfigData = {
  // IP配置
  serverIp: '192.168.1.100',
  mqttBrokerWeb: 'ws://broker.hivemq.com:8000',
  mqttBrokerNav: 'mqtt://broker.hivemq.com:1883',
  mqttProductId: 'smart_driving_v2',
  httpBase: 'https://api.smartdriving.com',
  
  // 硬件接口
  lidarNic: 'enp0s31f6',
  packetFilterEnabled: true,
  packetFilterRule: 'tcp and (port 80 or port 443)\nudp and port 53\nicmp',
  
  // 网络代理
  netProxyEnabled: false,
  netProxyAddr: 'proxy.company.com:8080',
  map8086: 'localhost:8086',
  map8088: 'localhost:8088'
}

// 存储当前配置（模拟数据库）
let currentConfig = { ...mockConfigData }

/**
 * 获取所有配置
 */
export const getConfig = async () => {
  await delay()
  
  return {
    code: 200,
    message: '获取配置成功',
    data: { ...currentConfig }
  }
}

/**
 * 更新单个配置参数
 * @param {Object} params - 参数对象
 * @param {string} params.key - 配置键名
 * @param {any} params.value - 配置值
 */
export const updateParam = async ({ key, value }) => {
  await delay()
  
  // 模拟错误场景（5% 概率）
  if (Math.random() < 0.05) {
    throw new Error('网络错误，请重试')
  }
  
  // 验证参数
  if (!key) {
    throw new Error('参数键名不能为空')
  }
  
  if (!(key in currentConfig)) {
    throw new Error(`未知的配置参数: ${key}`)
  }
  
  // 更新配置
  currentConfig[key] = value
  
  return {
    code: 200,
    message: '参数更新成功',
    data: {
      key,
      value,
      timestamp: Date.now()
    }
  }
}

/**
 * 批量更新配置（备用接口）
 * @param {Object} config - 配置对象
 */
export const updateConfig = async (config) => {
  await delay(500, 800)
  
  // 模拟错误场景
  if (Math.random() < 0.03) {
    throw new Error('服务器内部错误')
  }
  
  // 验证并更新配置
  const validKeys = Object.keys(mockConfigData)
  const updates = {}
  
  for (const [key, value] of Object.entries(config)) {
    if (validKeys.includes(key)) {
      currentConfig[key] = value
      updates[key] = value
    }
  }
  
  return {
    code: 200,
    message: `成功更新 ${Object.keys(updates).length} 个配置项`,
    data: {
      updates,
      timestamp: Date.now()
    }
  }
}

/**
 * 重置配置到默认值
 */
export const resetConfig = async () => {
  await delay(400, 700)
  
  currentConfig = { ...mockConfigData }
  
  return {
    code: 200,
    message: '配置已重置到默认值',
    data: { ...currentConfig }
  }
}

/**
 * 导出配置
 */
export const exportConfig = async () => {
  await delay(200, 400)
  
  return {
    code: 200,
    message: '配置导出成功',
    data: {
      config: { ...currentConfig },
      exportTime: new Date().toISOString(),
      version: 'v2.0.0-simple'
    }
  }
}

/**
 * 测试连接（简化版）
 * @param {string} type - 测试类型 (ip|mqtt|http|hardware|proxy)
 * @param {Object} config - 相关配置
 */
export const testConnection = async (type, config) => {
  await delay(1000, 2000)
  
  // 模拟测试结果
  const testResults = {
    ip: {
      success: Math.random() > 0.2, // 80% 成功率
      message: Math.random() > 0.2 ? 'IP连接测试通过' : 'IP地址无法访问'
    },
    mqtt: {
      success: Math.random() > 0.3, // 70% 成功率
      message: Math.random() > 0.3 ? 'MQTT连接测试通过' : 'MQTT代理连接失败'
    },
    http: {
      success: Math.random() > 0.1, // 90% 成功率
      message: Math.random() > 0.1 ? 'HTTP服务连接正常' : 'HTTP服务响应超时'
    },
    hardware: {
      success: Math.random() > 0.25, // 75% 成功率
      message: Math.random() > 0.25 ? '硬件接口检测正常' : '激光网卡未检测到'
    },
    proxy: {
      success: config?.netProxyEnabled ? Math.random() > 0.4 : true, // 代理启用时60%成功率
      message: config?.netProxyEnabled 
        ? (Math.random() > 0.4 ? '代理连接测试通过' : '代理服务器无响应')
        : '代理已禁用'
    }
  }
  
  const result = testResults[type] || { success: false, message: '未知测试类型' }
  
  return {
    code: 200,
    message: '测试完成',
    data: {
      type,
      success: result.success,
      message: result.message,
      timestamp: Date.now()
    }
  }
}

export default {
  getConfig,
  updateParam,
  updateConfig,
  resetConfig,
  exportConfig,
  testConnection
}
