import { formatDate } from './formatTime';
import { useMessage } from '/@/hooks/message';

// 格式化数据防止Excel自动转换
const formatValue = (value: string, preventConversion: boolean = false) => {
  if (preventConversion && typeof value === 'string' && /^[\d\-/]+$/.test(value)) {
      // 使用Excel公式格式强制文本显示
      return `"=""${value}"""`;
  }
  
  // 如果值包含逗号、引号或换行符，需要用引号包围
  if (typeof value === 'string' && (value.includes(',') || value.includes('"') || value.includes('\n'))) {
      return `"${value.replace(/"/g, '""')}"`;
  }
  
  // 默认情况返回原值
  return `"${value}"`;
};

/**
 * 导出CSV文件
 * @param data 要导出的数据
 * @param fileName 文件名
 */
export function exportToExcel(data: any[], fileName: string, sheetName: string = 'Sheet1') {
  try {
    // 检查数据是否为空
    if (!data || data.length === 0) {
      useMessage().warning('没有数据可导出');
      return;
    }

    // 获取表头
    const headers = Object.keys(data[0]);
    // 创建CSV内容
    const csvContent = [
      headers.join(','), // 表头
      ...data.map(row => 
        headers.map(header => {
          const value = row[header];
          return formatValue(value, true);
        }).join(',')
      )
    ].join('\n');

    // 添加BOM以支持中文
    const BOM = '\uFEFF';
    const blob = new Blob([BOM + csvContent], { type: 'text/csv;charset=utf-8;' });
    
    // 创建下载链接
    const link = document.createElement('a');
    const url = URL.createObjectURL(blob);
    link.setAttribute('href', url);
    link.setAttribute('download', `${fileName}.csv`);
    link.style.visibility = 'hidden';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
    
    useMessage().success('导出成功');
  } catch (error) {
    console.error('导出失败:', error);
    useMessage().error('导出失败，请检查数据格式');
  }
}

/**
 * 格式化表格数据为导出格式
 * @param tableData 表格数据
 * @param columns 列配置
 * @returns 格式化后的数据
 */
export function formatTableDataForExport(tableData: any[], columns: any[]) {
  return tableData.map((row, index) => {
    const exportRow: any = {};
    
    columns.forEach((column) => {
      if (column.prop) {
        // 处理特殊的数据格式
        if (column.formatter) {
          exportRow[column.label] = column.formatter(row, column, row[column.prop], index);
        } else {
          // 确保数据存在且不为undefined
          const value = row[column.prop];
          exportRow[column.label] = value !== undefined && value !== null ? value : '';
        }
      }
    });
    
    return exportRow;
  });
}


