// SPDX-FileCopyrightText: 2021 Johannes Loher
// SPDX-FileCopyrightText: 2021 Oliver Rümpelein
//
// SPDX-License-Identifier: MIT

import { getGame } from "../utils/utils";
import { DS4Check } from "./check";

export function registerSlayingDiceModifier() {
  PoolTerm.MODIFIERS.x = slay;
}

/**
 * @this {PoolTerm}
 * @param {string} modifier
 */
function slay(modifier) {
  const rgx = /[xX]/;
  const match = modifier.match(rgx);
  if (!match || !this.rolls) return;

  let checked = 0;
  while (checked < (this.dice.length ?? 0)) {
    const diceTerm = this.dice[checked];
    checked++;
    if (diceTerm instanceof DS4Check && diceTerm.coup) {
      const formula = `dsv${diceTerm.checkTargetNumber}c${diceTerm.maximumCoupResult}:${diceTerm.minimumFumbleResult}n`;
      const additionalRoll = Roll.create(formula).evaluate({ async: false });

      this.rolls.push(additionalRoll);
      this.results.push({ result: additionalRoll.total ?? 0, active: true });
      this.terms.push(formula);
    }
    if (checked > 1000) throw new Error(getGame().i18n.localize("DS4.ErrorSlayingDiceRecursionLimitExceeded"));
  }
}