import { Misc } from "./misc.js";

export class DialogStress extends Dialog {

  static async distribuerStress() {
    let dialogData = {
      motif: "Motif",
      stress: 10,
      immediat: false,
      actors: game.actors.filter(actor => actor.hasPlayerOwner && actor.isPersonnage())
        .map(actor => {
          let actorData = duplicate(Misc.data(actor));
          actorData.selected = actor.hasPlayerOwner;
          return actorData;
        })
    };

    const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-stress.html", dialogData);
    new DialogStress(dialogData, html)
      .render(true);
  }

  constructor(dialogData, html) {
    let options = { classes: ["DialogStress"], width: 400, height: 320, 'z-index': 99999 };
    let conf = {
      title: "Donner du stress",
      content: html,
      buttons: {
        "Stress": { label: "Stress !", callback: it => { this._onStress(); } }
      }
    };
    super(conf, options);
    this.dialogData = dialogData;
  }

  async _onStress() {
    this.validerStress();
    const compteur = this.dialogData.immediat ? 'experience' : 'stress';
    const stress = this.dialogData.stress;
    const motif = this.dialogData.motif;

    this.dialogData.actors.filter(it => it.selected)
      .map(it => game.actors.get(it._id))
      .forEach(actor => actor.distribuerStress(compteur, stress, motif));
  }


  validerStress() {
    this.dialogData.motif = $("[name='motif']").val();
    this.dialogData.stress = $("[name='stress']").val();
    this.dialogData.immediat = $("[name='immediat']").prop("checked");;
  }

  /* -------------------------------------------- */
  activateListeners(html) {
    super.activateListeners(html);
    html.find(".select-actor").change((event) => this.onSelectActor(event));
  }

  async onSelectActor(event) {
    event.preventDefault();
    const options = event.currentTarget.options;
    for (var i = 0; i < options.length; i++) { // looping over the options
      const actorId = options[i].attributes["data-actor-id"].value;
      const actor = this.dialogData.actors.find(it => it._id == actorId);
      if (actor) {
        actor.selected = options[i].selected;
      }
    };
  }

}