/**
 * 默认配置值
 *
 * 此文件包含所有默认配置值，方便集中管理和调整
 */

// No imports needed

// Nacos 服务器配置
export const DEFAULT_LANE_SERVER = 'localhost:8848'; // 服务器地址和端口
export const DEFAULT_LANE_NAMESPACE = 'public';
export const DEFAULT_LANE_GROUP_NAME = 'DEFAULT_GROUP';

// 心跳配置
export const DEFAULT_LANE_HEARTBEAT_INTERVAL = 5000; // 心跳间隔（毫秒）
export const DEFAULT_LANE_INSTANCE_TTL = 15000; // 实例过期时间（毫秒）

// 服务配置
export const DEFAULT_SERVICE_NAME = null; // 不提供默认值，确保必须明确指定服务名称
export const DEFAULT_LANE_ID = 'baseline'; // 默认泳道ID为 baseline
export const DEFAULT_HOST = 'localhost';
export const DEFAULT_PORT = 3000;

// 泳道配置
export const DEFAULT_TARGET_LANE_HEADER = 'X-Lane-ID'; // 保留旧名称以兼容
export const DEFAULT_LANE_TARGET_HEADER = 'X-Lane-ID';
export const DEFAULT_LANE_ENABLED = false;
export const DEFAULT_LANE_COOKIE_ENABLED = true; // 是否启用从cookie中检测泳道ID

// 响应头常量
export const HEADER_PROXIED_BY = 'X-Proxied-By';
export const HEADER_ORIGINAL_LANE = 'X-Original-Lane';
export const HEADER_PROXIED_BY_VALUE = 'multi-lane-manager';

// 调试头常量
export const HEADER_LANE_DEBUG = 'X-Lane-Debug';
export const HEADER_LANE_DETAIL = 'X-Lane-Detail';

// 超时配置
export const DEFAULT_LANE_PROXY_TIMEOUT = 15000;
export const DEFAULT_LANE_REGISTRATION_TIMEOUT = 5000;

// 缓存配置
export const DEFAULT_NACOS_CACHE_TTL = 5000; // Nacos 实例查询缓存时间（毫秒）

// 日志配置
export const DEFAULT_LOG_LEVEL = 'info';

/**
 * 安全地处理响应头值，移除无效字符
 *
 * @param headerValue 原始响应头值或值数组
 * @returns 处理后的安全响应头值
 */
export function getSafeHeaderValue(headerValue: string | string[]): string {
  try {
    if (Array.isArray(headerValue)) {
      // 如果是数组，处理每个元素并用 | 连接
      return headerValue
        .map(item => item.replace(/[\r\n\t]/g, ' ').replace(/[^\x20-\x7E]/g, ''))
        .join(' | ');
    } else {
      // 如果是字符串，直接处理
      return headerValue.replace(/[\r\n\t]/g, ' ').replace(/[^\x20-\x7E]/g, '');
    }
  } catch (error) {
    // 如果处理过程中出错，返回一个安全的默认值
    return 'Error processing header value';
  }
}

/**
 * 获取环境变量值，如果不存在则使用默认值
 *
 * @param key 环境变量名
 * @param defaultValue 默认值
 * @returns 环境变量值或默认值
 */
export function getEnvOrDefault(key: string, defaultValue: string): string {
  return process.env[key] || defaultValue;
}

/**
 * 获取环境变量的布尔值
 *
 * @param key 环境变量名
 * @param defaultValue 默认值
 * @returns 布尔值
 */
export function getBooleanEnv(key: string, defaultValue: boolean): boolean {
  const value = process.env[key];
  if (value === undefined) {
    return defaultValue;
  }
  return value.toLowerCase() === 'true';
}

/**
 * 获取环境变量的数字值
 *
 * @param key 环境变量名
 * @param defaultValue 默认值
 * @returns 数字值
 */
export function getNumberEnv(key: string, defaultValue: number): number {
  const value = process.env[key];
  if (value === undefined) {
    return defaultValue;
  }
  const parsed = parseInt(value, 10);
  return isNaN(parsed) ? defaultValue : parsed;
}
