import request from '@/utils/request';

// 创建参赛证生成任务
export const createBibTask = (bgImage: File, logo: File | null, taskName: string, bibParam: any) => {
  const formData = new FormData();
  formData.append('bgImage', bgImage);
  if (logo) {
    formData.append('logo', logo);
  }
  formData.append('taskName', taskName);
  formData.append('bibParam', new Blob([JSON.stringify(bibParam)], { type: 'application/json' }));

  return request({
    url: '/system/number/createBibTask',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
};

// 查询任务列表
export const getTaskList = (params: any) => {
  return request({
    url: '/system/number/taskList',
    method: 'get',
    params
  });
};

// 暂停任务
export const pauseTask = (taskId: number) => {
  return request({
    url: `/system/number/pauseTask/${taskId}`,
    method: 'post'
  });
};

// 删除任务
export const deleteTask = (taskId: number) => {
  return request({
    url: `/system/number/task/${taskId}`,
    method: 'delete'
  });
};

// 获取预签名下载URL
export const getDownloadUrl = (taskId: number) => {
  return request({
    url: `/system/number/getDownloadUrl/${taskId}`,
    method: 'get'
  });
};

// 直接下载任务结果（使用预签名URL）
export const directDownloadTask = async (taskId: number) => {
  try {
    const response = await getDownloadUrl(taskId);
    // console.log('API响应:', response);

    // 检查响应结构 - URL在msg字段中，不在data字段中
    const downloadUrl = response.msg || response.data;
    // console.log('预签名URL:', downloadUrl);

    // 检查URL是否有效
    if (!downloadUrl || downloadUrl === 'null' || downloadUrl === '') {
      throw new Error('预签名URL为空或无效');
    }

    // 直接使用预签名URL下载
    // console.log('使用预签名URL直接下载');

    // 直接打开预签名URL
    window.open(downloadUrl, '_self');

    // console.log('直接下载已触发');
  } catch (error) {
    console.error('直接下载失败:', error);
    throw error;
  }
};

// 下载任务结果（原有方式，作为回退）
export const downloadTask = (taskId: number) => {
  return request({
    url: `/system/number/downloadTask/${taskId}`,
    method: 'get',
    responseType: 'blob' // 重要：设置响应类型为blob
  }).then((response: any) => {
    // 创建blob对象
    const blob = new Blob([response], { type: 'application/zip' });
    // 创建下载链接
    const url = window.URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = `参赛证_任务${taskId}.zip`;
    link.style.display = 'none';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    // 释放URL对象
    window.URL.revokeObjectURL(url);
  }).catch((error) => {
    console.error('下载失败:', error);
    throw error;
  });
};

// 智能下载（优先直接下载，失败时回退到代理下载）
export const smartDownloadTask = async (taskId: number) => {
  try {
    // 优先尝试直接下载
    console.log('尝试直接下载...');
    await directDownloadTask(taskId);
  } catch (error) {
    console.warn('直接下载失败，回退到代理下载:', error);
    // 回退到代理下载
    await downloadTask(taskId);
  }
};
