/**
 * 简化版连接配置 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.group - 分组key（可选，兼容新接口）
 * @param {string} params.key - 配置键名
 * @param {any} params.value - 配置值
 */
export const updateParam = async ({ group, 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: {
      group,
      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 const getGroups = async () => {
  await delay()
  
  const groups = [
    { key: 'ip', name: 'IP配置' },
    { key: 'hardware', name: '硬件接口' },
    { key: 'proxy', name: '网络代理' },
    { key: 'advanced', name: '高级设置' },
    { key: 'security', name: '安全设置' },
    { key: 'performance', name: '性能优化' },
    { key: 'logging', name: '日志配置' },
    { key: 'monitoring', name: '监控告警' }
  ]
  
  return {
    code: 200,
    message: '获取分组成功',
    data: groups
  }
}

/**
 * 获取指定分组的参数（新增接口）
 * @param {Object} params - 参数对象
 * @param {string} params.group - 分组key
 */
export const getGroupParams = async ({ group }) => {
  await delay()
  
  const paramsByGroup = {
    ip: [
      {
        key: 'serverIp',
        label: '服务器IP',
        value: currentConfig.serverIp,
        desc: '请输入服务器IP地址',
        type: 'ip'
      },
      {
        key: 'mqttBrokerWeb',
        label: 'MQTT代理地址（网页）',
        value: currentConfig.mqttBrokerWeb,
        desc: '网页端MQTT连接地址',
        type: 'url'
      },
      {
        key: 'mqttBrokerNav',
        label: 'MQTT代理地址（导航）',
        value: currentConfig.mqttBrokerNav,
        desc: '导航端MQTT连接地址',
        type: 'url'
      },
      {
        key: 'mqttProductId',
        label: 'MQTT产品ID',
        value: currentConfig.mqttProductId,
        desc: '请输入产品ID',
        type: 'text'
      },
      {
        key: 'httpBase',
        label: 'HTTP服务地址',
        value: currentConfig.httpBase,
        desc: 'HTTP API基础地址',
        type: 'url'
      }
    ],
    hardware: [
      {
        key: 'lidarNic',
        label: '激光网卡',
        value: currentConfig.lidarNic,
        desc: '激光雷达网络接口名称',
        type: 'text'
      },
      {
        key: 'packetFilterEnabled',
        label: '网络包过滤使能',
        value: String(currentConfig.packetFilterEnabled),
        desc: '是否启用网络包过滤功能',
        type: 'switch'
      },
      {
        key: 'packetFilterRule',
        label: '网络包过滤规则',
        value: currentConfig.packetFilterRule,
        desc: '请输入过滤规则，每行一条',
        type: 'textarea'
      }
    ],
    proxy: [
      {
        key: 'netProxyEnabled',
        label: '开启网络代理',
        value: String(currentConfig.netProxyEnabled),
        desc: '是否启用网络代理服务',
        type: 'switch'
      },
      {
        key: 'netProxyAddr',
        label: '代理服务地址',
        value: currentConfig.netProxyAddr,
        desc: '代理服务器地址和端口',
        type: 'text'
      },
      {
        key: 'map8086',
        label: '8086映射参数',
        value: currentConfig.map8086,
        desc: '8086端口映射配置',
        type: 'text'
      },
      {
        key: 'map8088',
        label: '8088映射参数',
        value: currentConfig.map8088,
        desc: '8088端口映射配置',
        type: 'text'
      }
    ]
  }
  
  if (!group || !paramsByGroup[group]) {
    throw new Error(`未知的分组: ${group}`)
  }
  
  return {
    code: 200,
    message: '获取参数成功',
    data: paramsByGroup[group]
  }
}

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