import pickFile from './plusFilePicker.js'

async function urlToBase64(url) {
  // #ifndef MP-WEIXIN
  // 注意url必须为http或者https协议路径，本地file路径不行
  let res = await uni.request({
    url: url,
    method: 'GET',
    responseType: 'arraybuffer'
  });
  // 容错处理
  if (Array.isArray(res)) {
    res = res.find(item => item && item.data)
  }
  let base64 = uni.arrayBufferToBase64(res.data); //把arraybuffer转成base64
  // #endif

  // #ifdef MP-WEIXIN
  const fs = wx.getFileSystemManager()
  let base64 = fs.readFileSync(url, 'base64')
  // #endif
  return base64
}

/**
 * 文件选择 表格文件导入 返回表格数据
 * @param callback 为了兼容安卓文件选择，此处使用callback回调来接受解析后的json参数，其他平台勿使用该回调
 */
export async function importToJson(sheetList = [], callback) {
  // #ifdef H5
  let fileRes = await uni.chooseFile({
    count: 1,
    extension: ['.xls', '.xlsx']
  });
  // fileRes可能是单对象，也可能是数组且数组中存在某项为null的情况，需要容错处理以取出真实文件数据对象
  if (Array.isArray(fileRes)) {
    fileRes = fileRes.find(item => item && item.tempFilePaths.length > 0)
  }
  const filePath = fileRes.tempFilePaths[0]
  return await fileToJson(filePath, sheetList)
  // #endif

  // #ifdef MP-WEIXIN
  const fileRes = await wx.chooseMessageFile({
    count: 1,
    type: 'file',
    extension: ['.xls', '.xlsx']
  })
  const filePath = fileRes.tempFiles[0].path
  return await fileToJson(filePath, sheetList)
  // #endif

  // #ifdef APP
  switch (plus.os.name) {
    case "Android":
      // Android平台: plus.android.*  
      // 安卓需要先使用Native.js进行文件选择，上传文件后再进行解析
      pickFile.PickFile(async (src) => {
        let srcPath = 'file://' + src;
        console.log('==== srcPath :', srcPath);
        const upRes = await uniCloud.uploadFile({
          filePath: srcPath,
          // 同名会导致报错 policy_does_not_allow_file_overwrite
          // cloudPath可由 想要存储的文件夹/文件名 拼接，若不拼文件夹名则默认存储在cloudstorage文件夹中
          cloudPath: `cloudstorage/${Date.now()}`,
          cloudPathAsRealPath: true
        })
        console.log('==== upRes :', upRes);
        const filePath = upRes.fileID
        callback(await fileToJson(filePath, sheetList))
      });
      break;
    case "iOS":
      // iOS平台: plus.ios.*  
      break;
    default:
      // 其它平台  
      break;
  }
  // #endif
}
/**
 * 表格文件导入 返回表格数据
 */
async function fileToJson(path, sheetList) {
  const base = await urlToBase64(path);
  const eachObj = uniCloud.importObject('sv-excel-json-each')
  const dataRes = await eachObj.getExcelToJson({
    data: base,
    sheetList
  })
  return dataRes
}

/**
 * 数据导出 返回表格文件下载
 * @param {Object} options
 * 注：file文件模式可自动下载并返回文件下载路径，base64模式不提供自动下载并直接返回base64字串
 */
export async function exportToExcel(options) {
  const eachObj = uniCloud.importObject('sv-excel-json-each')
  const dataRes = await eachObj.getJsonToExcel(options.params)
  if (dataRes.code == 0) {
    if (options.autoDownload && options.params.type == 'file') {
      /**
       * 下载文件资源到本地，客户端直接发起一个 HTTP GET 请求，返回文件的本地临时路径
       * 注意：在HbuilderX内置浏览器中无法正常运行
       * @tutorial https://uniapp.dcloud.net.cn/api/request/network-file.html#downloadfile
       */
      uni.downloadFile({
        url: dataRes.data,
        success: (res) => {
          uni.openDocument({
            filePath: res.tempFilePath,
            showMenu: true,
          });
        }
      })
    }
  } else {
    console.error('==== dataRes :', dataRes);
  }

  return dataRes.data
}