/**
 * 坐标映射配置系统 - 渐进式功能启用
 */

export interface CoordinateMappingConfig {
  // 基础功能（始终启用）
  enableBasicMapping: boolean
  
  // 高精度功能（可选启用）
  enableSubPixelPrecision: boolean
  enableNavigationBarDetection: boolean
  enableDensityCorrection: boolean
  enableAspectRatioCorrection: boolean
  
  // 调试功能
  enableDetailedLogging: boolean
  enableCoordinateValidation: boolean
  enablePerformanceMonitoring: boolean
  
  // 容错设置
  fallbackToBasicOnError: boolean
  maxCoordinateError: number // 最大允许的坐标误差（像素）
  
  // 设备特定优化
  enableDeviceSpecificOptimizations: boolean
  minimumScreenSize: { width: number; height: number }
  maximumScreenSize: { width: number; height: number }
}

export const DEFAULT_COORDINATE_MAPPING_CONFIG: CoordinateMappingConfig = {
  // 基础功能
  enableBasicMapping: true,
  
  // 高精度功能（逐步启用）
  enableSubPixelPrecision: false, // 🚩 第一阶段：关闭
  enableNavigationBarDetection: true, // ✅ 相对安全
  enableDensityCorrection: true, // ✅ 相对安全
  enableAspectRatioCorrection: true, // ✅ 相对安全
  
  // 调试功能
  enableDetailedLogging: false, // 默认关闭，需要时开启
  enableCoordinateValidation: true,
  enablePerformanceMonitoring: false,
  
  // 容错设置
  fallbackToBasicOnError: true,
  maxCoordinateError: 10, // 允许10像素误差
  
  // 设备特定优化
  enableDeviceSpecificOptimizations: false, // 🚩 第一阶段：关闭
  minimumScreenSize: { width: 240, height: 320 },
  maximumScreenSize: { width: 4096, height: 8192 }
}

/**
 * 根据设备特征自动调整配置
 */
export function createOptimizedConfig(
  deviceWidth: number,
  deviceHeight: number,
  _userAgent?: string
): CoordinateMappingConfig {
  const config = { ...DEFAULT_COORDINATE_MAPPING_CONFIG }
  
  // 基于屏幕尺寸调整
  const screenArea = deviceWidth * deviceHeight
  const aspectRatio = Math.max(deviceWidth, deviceHeight) / Math.min(deviceWidth, deviceHeight)
  
  // 高分辨率设备可以启用亚像素精度
  if (screenArea > 2073600) { // 1080p以上
    config.enableSubPixelPrecision = true
  }
  
  // 长屏设备通常有导航栏
  if (aspectRatio > 2.0) {
    config.enableNavigationBarDetection = true
  }
  
  // 超大屏幕需要更高的容错性
  if (deviceWidth > 1440 || deviceHeight > 2560) {
    config.maxCoordinateError = 15
  }
  
  return config
}

/**
 * 验证坐标映射配置的安全性
 */
export function validateConfig(config: CoordinateMappingConfig): {
  isValid: boolean
  warnings: string[]
  errors: string[]
} {
  const warnings: string[] = []
  const errors: string[] = []
  
  // 检查基础配置
  if (!config.enableBasicMapping) {
    errors.push('基础坐标映射不能被禁用')
  }
  
  // 检查容错设置
  if (config.maxCoordinateError < 1) {
    warnings.push('坐标误差容忍度过低，可能导致映射失败')
  }
  
  if (config.maxCoordinateError > 50) {
    warnings.push('坐标误差容忍度过高，可能影响精度')
  }
  
  // 检查屏幕尺寸范围
  if (config.minimumScreenSize.width < 100 || config.minimumScreenSize.height < 100) {
    errors.push('最小屏幕尺寸设置过小')
  }
  
  if (config.maximumScreenSize.width > 10000 || config.maximumScreenSize.height > 10000) {
    warnings.push('最大屏幕尺寸设置过大')
  }
  
  return {
    isValid: errors.length === 0,
    warnings,
    errors
  }
}

/**
 * 获取功能启用状态的摘要
 */
export function getConfigSummary(config: CoordinateMappingConfig): string {
  const enabledFeatures: string[] = []
  const disabledFeatures: string[] = []
  
  const features = [
    { key: 'enableSubPixelPrecision', name: '亚像素精度' },
    { key: 'enableNavigationBarDetection', name: '导航栏检测' },
    { key: 'enableDensityCorrection', name: '密度修正' },
    { key: 'enableAspectRatioCorrection', name: '长宽比修正' },
    { key: 'enableDeviceSpecificOptimizations', name: '设备特定优化' }
  ]
  
  features.forEach(feature => {
    if (config[feature.key as keyof CoordinateMappingConfig]) {
      enabledFeatures.push(feature.name)
    } else {
      disabledFeatures.push(feature.name)
    }
  })
  
  let summary = `坐标映射配置摘要:\n`
  summary += `✅ 已启用: ${enabledFeatures.join(', ') || '无'}\n`
  summary += `❌ 已禁用: ${disabledFeatures.join(', ') || '无'}\n`
  summary += `🎯 误差容忍: ${config.maxCoordinateError}px\n`
  summary += `🔧 回退模式: ${config.fallbackToBasicOnError ? '启用' : '禁用'}`
  
  return summary
}

export default DEFAULT_COORDINATE_MAPPING_CONFIG 