"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ElseAction = void 0;
const index_js_1 = require("../model/index.js");
const util = __importStar(require("../util/index.js"));
const Flow_if_1 = require("./Flow.if");
class ElseAction extends index_js_1.Action {
    hasChildren() {
        return true;
    }
    async exec() {
        const chain = this.getChain();
        util.assertScript(chain.length, 'else must immediately follow if or else-if');
        for (const action of chain) {
            util.assertPlayback(action.$runtime.bypassed != null, 'Cannot execute else: previous actions need to be executed first');
            if (!action.$runtime.bypassed) {
                this.$runtime.bypassed = true;
                return;
            }
        }
        this.$runtime.bypassed = false;
    }
    afterRun() {
        if (this.$runtime.bypassed) {
            this.skip();
        }
        else {
            this.enter();
        }
    }
    getChain() {
        return Array.from((0, Flow_if_1.collectIfElseChain)(this));
    }
}
exports.ElseAction = ElseAction;
ElseAction.$type = 'Flow.else';
ElseAction.$icon = 'fas fa-question';
ElseAction.$help = `
Passes control flow to the children only if neither one of the preceeding If or Else If actions were entered.

This action must be placed next to either If or another Else If action.
All adjacent If, Else If and Else actions form a single chain with a guarantee that at most one branch is entered.

### Use For

- general purpose branching and conditional execution
`;
//# sourceMappingURL=Flow.else.js.map