/** 构造大小写不敏感的 getHeader（针对普通 object header） */
function makeCaseInsensitiveGetter(headerObj) {
  var map = {};
  if (headerObj) {
    for (var k in headerObj) {
      map[k.toLowerCase()] = String(headerObj[k]);
    }
  }
  return function (name) {
    return map[name.toLowerCase()];
  };
}
/**
 * 统一的底层请求发送
 *
 * - 仅支持微信小游戏环境（wx.request）
 * - 不在小游戏环境下直接 reject，让业务方明确感知
 *
 * 不做业务逻辑，只负责把 IRawRequest 发出去，包成 IRawResponse 返回
 */
function doRequest(param) {
  var method = param.method || 'POST';
  var header = param.header || {
    'Content-Type': 'application/json'
  };
  var body = param.reqData;
  if (typeof wx === 'undefined' || !wx || typeof wx.request !== 'function') {
    return Promise.reject(new Error('[pmd-api-cocos/network] 当前环境不支持 wx.request，' + '请确认运行在微信小游戏环境下'));
  }
  return new Promise(function (resolve, reject) {
    wx.request({
      url: param.url,
      method: method,
      header: header,
      data: body,
      dataType: 'json',
      success: function success(res) {
        var status = res.statusCode;
        resolve({
          status: status,
          ok: status >= 200 && status < 300,
          data: res.data,
          statusText: res.errMsg || '',
          getHeader: makeCaseInsensitiveGetter(res.header)
        });
      },
      fail: function fail(err) {
        reject(new Error((err === null || err === void 0 ? void 0 : err.errMsg) || 'wx.request failed'));
      }
    });
  });
}

export { doRequest };
