

import axios from 'axios';
import { useAppConfig } from '@vben/hooks';
const { apiURL: baseURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
import { useAccessStore } from '@vben/stores';
import { message } from 'ant-design-vue';

/**
 * 将Blob数据导出为文件
 * @param data Blob数据
 * @param fileName 文件名
 */
export const exportFileByData = (data: Blob, fileName: string = 'export.xlsx') => {
  // 创建临时下载链接
  const downloadUrl = window.URL.createObjectURL(data);

  // 创建隐藏的a标签触发下载
  const link = document.createElement('a');
  link.style.display = 'none';
  link.href = downloadUrl;
  link.download = fileName;
  document.body.appendChild(link);
  link.click();

  // 清理资源
  window.URL.revokeObjectURL(downloadUrl);
  document.body.removeChild(link);
};

/**
 * 导出文件
 * @param url 接口URL
 * @param params 请求参数
 * @param fileName 文件名
 * @returns Promise
 */
export const exportFile = async (
  url: string,
  params: any,
  fileName: string = 'export.xlsx'
): Promise<void> => {
  debugger;
  try {
    const accessStore = useAccessStore();
    const token = accessStore.accessToken;
    const fullUrl = url.startsWith('http') ? url : `${baseURL}${url}`;
    
    const response = await axios({
      method: 'post',
      url: fullUrl,
      data: params,
      responseType: 'blob',
      headers: {
        'Content-Type': 'application/json',
        Authorization: token
      }
    });
    
    exportFileByData(response.data, fileName);
  } catch (error: any) {
    console.error('导出失败:', error);
    
    // 处理JSON格式的错误信息
    if (error.response?.data?.type?.includes('json')) {
      try {
        const reader = new FileReader();
        reader.onload = () => {
          try {
            const errData = JSON.parse(reader.result as string);
            const errMsg = errData.message || '导出失败，请稍后重试';
            console.error('导出错误信息:', errMsg);
            message.error(`导出失败: ${errMsg}`);
          } catch (parseError) {
            message.error('导出失败: 解析错误信息失败');
          }
        };
        reader.readAsText(error.response.data);
      } catch (readerError) {
        message.error('导出失败: 无法读取错误信息');
      }
    } else {
      message.error('文件下载失败，请检查网络连接或联系管理员');
    }
  }
};
