'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _typeof = require('@babel/runtime/helpers/typeof');
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _createClass = require('@babel/runtime/helpers/createClass');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);

/**
 * Cocos 端请求域名拼接拦截器
 *
 * 业务侧调用 `QueryUserInfoClient.QueryUserInfo(...)` 时，
 * pb 编译产物里只有 `/pmdtrpc.commcgi.user.user/QueryUserInfo` 这种相对路径，
 * 本拦截器负责拼成 `baseUrl + path` 的完整 URL。
 *
 * 特点：
 *   - 幂等：第一次执行时备份 `__cocosOriginUrl`，重试时基于它重拼，不会累加
 *   - 已是 http(s) 的 URL 不动
 *   - 默认 POST + application/json
 *
 * 参考 pmd-npm/packages/business/src/network/interceptor/request/cocos/cocosHostInterceptor.ts
 */
var CocosHostInterceptor = /*#__PURE__*/function () {
  function CocosHostInterceptor(options) {
    _classCallCheck__default["default"](this, CocosHostInterceptor);
    this.options = options;
  }
  return _createClass__default["default"](CocosHostInterceptor, [{
    key: "interceptor",
    value: function interceptor(param) {
      var _a, _b;
      // 备份原始 url，用于幂等重试
      if (param.__cocosOriginUrl === undefined) {
        param.__cocosOriginUrl = param.url;
      }
      var originUrl = param.__cocosOriginUrl || '';
      // 若 reqData 带了 addressName + methodName（兼容 gp-next 风格），用它们拼 path
      var addressName = ((_a = param.reqData) === null || _a === void 0 ? void 0 : _a.addressName) || '';
      var methodName = ((_b = param.reqData) === null || _b === void 0 ? void 0 : _b.methodName) || '';
      var path = originUrl;
      if (addressName) {
        path = "/".concat(addressName.replace(/^\/+/, ''));
        if (methodName) {
          path += "/".concat(methodName.replace(/^\/+/, ''));
        }
      }
      if (/^https?:\/\//i.test(path)) {
        param.url = path;
      } else {
        var base = (this.options.baseUrl || '').replace(/\/+$/, '');
        var normalizedPath = path.startsWith('/') ? path : "/".concat(path);
        param.url = base + normalizedPath;
      }
      // 清理不应进入 body 的字段
      if (param.reqData && _typeof__default["default"](param.reqData) === 'object') {
        delete param.reqData.addressName;
        delete param.reqData.methodName;
      }
      // 默认 POST + JSON
      param.method = param.method || 'POST';
      param.header = Object.assign({
        'Content-Type': 'application/json'
      }, param.header || {});
      return [false, param];
    }
  }]);
}();

exports.CocosHostInterceptor = CocosHostInterceptor;
