// SPDX-FileCopyrightText: 2021 Johannes Loher
//
// SPDX-License-Identifier: MIT

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

export class DS4Roll extends Roll {
  /** @override */
  static CHAT_TEMPLATE = "systems/ds4/templates/dice/roll.hbs";

  /**
   * @override
   * @remarks
   * This only differs from {@link Roll#render} in that it provides `isCoup` and `isFumble` properties to the roll
   * template if the first dice term is a ds4 check.
   */
  async render({ flavor, template = this.constructor.CHAT_TEMPLATE, isPrivate = false } = {}) {
    if (!this._evaluated) await this.evaluate({ async: true });
    const firstDiceTerm = this.dice[0];
    const isCoup = firstDiceTerm instanceof DS4Check && firstDiceTerm.coup;
    const isFumble = firstDiceTerm instanceof DS4Check && firstDiceTerm.fumble;
    const chatData = {
      formula: isPrivate ? "???" : this._formula,
      flavor: isPrivate ? null : flavor,
      user: getGame().user?.id,
      tooltip: isPrivate ? "" : await this.getTooltip(),
      total: isPrivate ? "?" : Math.round((this.total ?? 0) * 100) / 100,
      isCoup: isPrivate ? null : isCoup,
      isFumble: isPrivate ? null : isFumble,
    };
    return renderTemplate(template, chatData);
  }
}
