/**
 * 数据验证和格式化工具
 */

/**
 * 清理对象中的空值
 * @param {Object} obj - 需要清理的对象
 * @param {Boolean} removeEmptyArrays - 是否移除空数组
 * @returns {Object} - 清理后的对象
 */
export function cleanEmptyValues(obj, removeEmptyArrays = false) {
  const cleaned = {};
  
  Object.keys(obj).forEach(key => {
    const value = obj[key];
    
    if (value === null || value === undefined || value === '') {
      // 跳过空值
      return;
    }
    
    if (removeEmptyArrays && Array.isArray(value) && value.length === 0) {
      // 可选：跳过空数组
      return;
    }
    
    // 递归处理嵌套对象
    if (typeof value === 'object' && !Array.isArray(value) && value !== null) {
      const cleanedNested = cleanEmptyValues(value, removeEmptyArrays);
      if (Object.keys(cleanedNested).length > 0) {
        cleaned[key] = cleanedNested;
      }
    } else {
      cleaned[key] = value;
    }
  });
  
  return cleaned;
}

/**
 * 验证导出参数格式
 * @param {Object} params - 导出参数
 * @returns {Object} - 包含验证结果和清理后的参数
 */
export function validateExportParams(params) {
  const errors = [];
  const warnings = [];
  
  // 必填字段验证
  if (!params.kb_id) {
    errors.push('kb_id 是必填字段');
  }
  
  // 类型验证
  if (params.document_ids && !Array.isArray(params.document_ids)) {
    errors.push('document_ids 必须是数组类型');
  }
  
  if (params.doc_type_id !== undefined && params.doc_type_id !== null && typeof params.doc_type_id !== 'number') {
    warnings.push('doc_type_id 应该是数字类型');
  }
  
  // 清理参数
  const cleanedParams = cleanEmptyValues(params);
  
  return {
    isValid: errors.length === 0,
    errors,
    warnings,
    cleanedParams
  };
}

/**
 * 格式化JSON用于日志输出
 * @param {Object} data - 要格式化的数据
 * @param {String} title - 日志标题
 */
export function logJSON(data, title = 'Data') {
  console.group(`📋 ${title}`);
  console.log('JSON字符串:', JSON.stringify(data, null, 2));
  console.log('对象结构:', data);
  console.groupEnd();
}

/**
 * 检查JSON数据大小
 * @param {Object} data - 要检查的数据
 * @returns {Object} - 包含大小信息的对象
 */
export function checkJSONSize(data) {
  const jsonString = JSON.stringify(data);
  const sizeInBytes = new Blob([jsonString]).size;
  const sizeInKB = (sizeInBytes / 1024).toFixed(2);
  
  return {
    bytes: sizeInBytes,
    kb: sizeInKB,
    string: jsonString,
    isLarge: sizeInBytes > 1024 * 1024 // 超过1MB认为是大数据
  };
} 