// 获取合并的数据
export const mergeConfig = (_this, options) => {
  //判断url是不是链接
  let urlType = /^(http|https):\/\//.test(options.url);
  let config = Object.assign({
    timeout: _this.timeout
  }, _this.config, options);
  if (options.method == "FILE") {
    config.url = urlType ? options.url : _this.fileUrl + options.url;
  } else {
    config.url = urlType ? options.url : _this.baseUrl + options.url;
  }
  //请求头
  if (options.header) {
    config.header = Object.assign({}, _this.header, options.header);
  } else {
    config.header = Object.assign({}, _this.header);
  }
  return config;
}

// 请求
export const dispatchRequest = (requestInfo) => {
  // console.log(requestInfo, 'requestInfo.header')
  return new Promise((resolve, reject) => {
    let requestAbort = true;
    let requestData = {
      url: requestInfo.url,
      header: requestInfo.header, //加入请求头
      responseType: requestInfo.responseType || '',
      success: (res) => {
        requestAbort = false;
        resolve(res);
      },
      fail: (err) => {
        requestAbort = false;
        if (err.errMsg == "request:fail abort") {
          reject({
            errMsg: "请求超时，请重新尝试",
            statusCode: 0,
          });
        } else {
          reject(err);
        }
      }
    };
    //请求类型
    if (requestInfo.method) {
      requestData.method = requestInfo.method;
    }
    if (requestInfo.data) {
      // 对数据进行编码
      // if (requestInfo.method === 'GET') {
      //   console.log(requestInfo.method, requestInfo.url, 'requestInfo.method')
      //   const encodedData = Object.keys(requestInfo.data).map((key, index) => {
      //     return encodeURIComponent(key) + '=' + encodeURIComponent(requestInfo.data[key]);
      //   }).join('&');
      //   requestData.url = requestInfo.url + '?' + encodedData;
      //   console.log(requestInfo.url, 'requestInfo.url')
      // } else {
      //   requestData.data = requestInfo.data;
      // }
      requestData.data = requestInfo.data;
    }
    // #ifdef MP-WEIXIN || MP-ALIPAY
    if (requestInfo.timeout) {
      requestData.timeout = requestInfo.timeout;
    }
    // #endif
    if (requestInfo.dataType) {
      requestData.dataType = requestInfo.dataType;
    }
    // #ifndef APP-PLUS || MP-ALIPAY
    // #endif
    // #ifdef H5
    if (requestInfo.withCredentials) {
      requestData.withCredentials = requestInfo.withCredentials;
    }
    // #endif
    let requestTask = uni.request(requestData);

    setTimeout(() => {
      if (requestAbort) {
        requestTask.abort();
      }
    }, requestInfo.timeout)
  })
}

// jsonp请求
export const jsonpRequest = (requestInfo) => {
  return new Promise((resolve, reject) => {
    let dataStr = '';
    Object.keys(requestInfo.data).forEach(key => {
      dataStr += key + '=' + requestInfo.data[key] + '&';
    });
    //匹配最后一个&并去除
    if (dataStr !== '') {
      dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
    }
    requestInfo.url = requestInfo.url + '?' + dataStr;
    let callbackName = "callback" + Math.ceil(Math.random() * 1000000);
    // #ifdef H5
    window[callbackName] = (data) => {
      resolve(data);
    }
    let script = document.createElement("script");
    script.src = requestInfo.url + "&callback=" + callbackName;
    document.head.appendChild(script);
    // 及时删除，防止加载过多的JS
    document.head.removeChild(script);
    // #endif
  });
}
