import LionExportExcel from '../MainExport/MainExport'
import Modal from 'antd/lib/modal'
import React from 'react';
import MSG from '../../../../utils/msgsub'
import { Shell } from '../../../../../../utils/shell';
import "./index.css"


const openDownloadDialog = (url: any, saveName: string) => {
  return new Promise((resolve, reject) => {
    resolve('')
  }).then(res => {
    if (typeof url == 'object' && url instanceof Blob) {
      url = URL.createObjectURL(url); // 创建blob地址
    }
    var aLink = document.createElement('a');
    aLink.href = url;
    aLink.download = saveName || ''; // HTML5新增的属性，指定保存文件名，可以不要后缀，注意，file:///模式下不会生效
    var event;
    if (window.MouseEvent) event = new MouseEvent('click');
    else {
      event = document.createEvent('MouseEvents');
      event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    }
    aLink.dispatchEvent(event);
  })
}

// 行下载方式
const rowExport = async (action: any, ctx: any, env: any) => {
  const baseUrl = env?.axiosInstance?.defaults?.baseURL || env?.ajaxApi;
  const exportFields = ctx.exportFields.map((field: any) => field.name).join(',')
  if (!Shell.hasShell()) {
    const res = await env.fetcher(ctx.api, { ...ctx, exportType: ctx.exportType, exportFields }).catch()
    if (res?.status === 0) {
      res?.data && await openDownloadDialog((baseUrl ?? res?.reqUrl) + res?.data?.fileUrl, res?.data?.fileName)
      MSG._success(res?.msg, env?.getModalContainer);
      return true
    } else if (res?.status === 301) {
      MSG._info(res?.msg, env?.getModalContainer);
    } else {
      MSG._error(res?.msg, env?.getModalContainer);
    }
  } else {
    const res = await env.fetcher(ctx.api, { ...ctx, exportType: ctx.exportType, exportFields }).catch()
    if (res?.status === 0) {
      const confirmd = await env.confirm('是否要保存并打开文件?');
      if (confirmd) {
        const shellRes = await Shell.download((baseUrl ?? res?.reqUrl) + res?.data?.fileUrl, res?.data?.fileName, 1);
        if (shellRes?.success) {
          MSG._success(shellRes?.msg!, env?.getModalContainer);
          return true
        } else {
          MSG._error(shellRes?.msg!, env?.getModalContainer);
        }
      } else {
        MSG._info('用户取消', env?.getModalContainer)
      }
    } else {
      MSG._error(res?.msg, env?.getModalContainer);
    }
  }
  return false
}

// 行下载方式
// const rowExport = (action: any, ctx: any, env: any) => {

//   env?.fetcher({ ...action.api, responseType: "blob" }, { ...ctx, exportType: action.exportType }).then((res: any) => {
//     if (res?.headers["content-type"].indexOf('application/vnd.ms-excel') !== -1) {
//       openDownloadDialog(res?.data, res?.headers['content-disposition']);
//       MSG._success('导出成功', env?.getModalContainer);

//     } else {
//       let fileReader = new FileReader();
//       fileReader.onload = function () {
//         let jsonData = JSON.parse(this.result as any);  // 说明是普通对象数据，后台转换失败
//         if (jsonData?.status === 302) {
//           MSG._error('导出数据为空', env?.getModalContainer);
//         } else {
//           MSG._error(jsonData?.msg, env?.getModalContainer);
//         }
//       };
//       fileReader.readAsText(res.data)
//     }
//     return;
//   }).catch((err: any) => {
//     MSG._error('导出出错', env?.getModalContainer)
//     return;
//   })
// }

// 选中或全量导出
const LionExport = (action: any, ctx: any, data: any, env: any, normalSelectAll?: boolean) => {
  const modal = Modal.info({
    className: "lion-wrapper-export",
    getContainer: env?.getModalContainer as any,
    mask: false,
    maskClosable: true
  })
  modal.update({
    content: <LionExportExcel data={data} normalSelectAll={normalSelectAll} env={env} action={action} ctx={ctx} handleCancel={() => { modal.destroy() }} />
  })
}

export { LionExport, rowExport }
