"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));

var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));

var _lodash = _interopRequireDefault(require("lodash"));

var _ConditionExecutor = _interopRequireDefault(require("./ConditionExecutor"));

/**
 * conditions为一个二维数组，数组每一项为第一个group，
 * 每个group里面有定义好的条件，条件之间都是AND关系，group
 * 之间为OR关系
 * [
 *  [GROUP:[CONDITION AND CONDITION]] OR  [GROUP:[CONDITION]]
 * ]
 */
var ConditionPaser = /*#__PURE__*/function () {
  function ConditionPaser(conditions, data, extraConfig) {
    (0, _classCallCheck2.default)(this, ConditionPaser);
    this.conditions = conditions || [];
    this.data = data || [];
    this.extraConfig = extraConfig;
  } //执行条件


  (0, _createClass2.default)(ConditionPaser, [{
    key: "execCondition",
    value: function execCondition() {
      var _this = this;

      return _lodash.default.map(this.conditions, function (group) {
        return _lodash.default.map(group, function (condition) {
          return _ConditionExecutor.default.exec(condition, _this.data, _this.extraConfig);
        });
      });
    } //合并每个条件执行结果, 产生最终结果

  }, {
    key: "mergeResult",
    value: function mergeResult(resultList) {
      var result = false;

      _lodash.default.forEach(resultList, function (group) {
        //如果没有结果是false的条件
        if (!_lodash.default.isEmpty(group) && _lodash.default.indexOf(group, false) === -1) {
          result = true;
          return;
        }
        /*  if(!_.isEmpty(group) && !_.find(group, {result: false})) {
             result = true;
             return;
         } */

      });

      return result;
    } //获取结果

  }, {
    key: "getResult",
    value: function getResult() {
      var _this2 = this;

      //每个条件的执行结果
      return Promise.all(this.execCondition().map(function (group) {
        return Promise.all(group);
      })).then(function (resultList) {
        return {
          conditionResult: _this2.mergeResult(resultList),
          detail: resultList
        };
      });
      /*  return Promise.all(_resultList).then((resultList) => {
           return {
               conditionResult: this.mergeResult(resultList),
               detail: resultList
           }
       }) */
    }
  }]);
  return ConditionPaser;
}();

var _default = ConditionPaser;
exports.default = _default;