import React from 'react'
import Taro from '@tarojs/taro'

// const baseURL = HOST

export default async (options) => {
  const opts = optionBuilder(options)
  console.log(opts, "optsoptsoptsoptsoptsoptsoptsoptsoptsopts")

  return Taro.request(opts)
    .then((res) => {
      console.log(res, '----------');
      const { code } = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
      if (code == '1000') {
        return res
      } else {
        throw res
      }
      return res
    })
    .catch((err) => {
      console.log(err, '111111111111');
      if(err.status=== 504){
        Taro.showToast({
          title: "请检查网络",
          icon: 'none'
        })
        throw err
      }
      throw err
    })
}

export function optionBuilder(options) {
  const {
    url,
    data = {},
    method = 'get',
    params = {},
    header
  } = options
  // console.log(user,'user')
  let api = `/api/mp${url}`

  if (JSON.stringify(params) != "{}") {
    api = `${api}?${paramsToString(params)}`
  } 
  const token = Taro.getStorageSync('token')||''
  return {
    url: api,
    method,
    data,
    header: {
      'content-type': 'application/json',
      'X-Authorization-JWT': `${token}`,
      // 'appId': appId,
      // 'x-action': 'miniapp',
      // 'x-version': Version,
      // 'x-consultant': consultant,
      // 'x-recommender': recommender,

      ...header || {},
    },
    mode: 'cors',
  }

}


function paramsToString(params) {
  return Object.keys(params).map((key) => {
    const val = params[key]
    return Array.isArray(val) ? val.map((x) => {
      return composeKeyValue(key, x)
    }).join('&') : composeKeyValue(key, val)

  }).join('&')
}

function composeKeyValue(k, v, encode) {

  return encode === false ? `${k}=${v}` : `${encodeURIComponent(k)}=${encodeURIComponent(v)}`
}


export const uploadFiles = async (files,url) => {
  const uploads = []
  const token = Taro.getStorageSync('token')||''
  for (var i = 0; i < files.length; i++) {
    uploads[i] = new Promise((resolve, reject) => {
      Taro.uploadFile({
        url:  url||`/api/mp/image`,
        filePath: files[i],
        header: {
          'authorization': `X-Authorization-JWT ${token}`,

          // 'x-action': 'miniapp'
        },
        name: 'file',
        success: function (res) {
          // debugger
          const _data = JSON.parse(res.data)
          // if (_data.code !== CODE_SUCCESS) {
          //   reject(new Error(_data.message))
          // }

          resolve(_data.data)
        },
        fail(err) {
          reject(err)
        }
      })
    })
  }

  return Promise.all(uploads)
}