import { Grammar } from "./grammar.js";
import { Misc } from "./misc.js";
import { RdDUtility } from "./rdd-utility.js";

export class DialogFabriquerPotion extends Dialog {

  /* -------------------------------------------- */
  static async create(actor, item, dialogConfig) {
    let potionData = DialogFabriquerPotion.prepareData(actor, item);

    let conf = {
      title: `Fabriquer une potion de ${potionData.data.categorie}`,
      content: await renderTemplate(dialogConfig.html, potionData),
      default: potionData.buttonName,
    };

    let options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 };
    mergeObject(options, dialogConfig.options ?? {}, { overwrite: true })

    const dialog = new DialogFabriquerPotion(actor, potionData, conf, options);
    dialog.render(true);
    return dialog;
  }

  /* -------------------------------------------- */
  static prepareData(actor, item) {
    let potionData = duplicate(Misc.data(item));
    potionData.nbBrinsSelect = RdDUtility.buildListOptions( 1, potionData.data.quantite);
    potionData.nbBrins =  potionData.data.quantite;
    potionData.buttonName = "Fabriquer";
    return potionData;
  }

  /* -------------------------------------------- */
  constructor(actor, potionData, conf, options) {
    conf.buttons = {
      [potionData.buttonName]: {
        label: potionData.buttonName, callback: it => {
          this.fabriquer();
        }
      }
    };

    super(conf, options);

    this.actor = actor;
    this.potionData = potionData;
  }

  /* -------------------------------------------- */
  activateListeners(html) {
    super.activateListeners(html);

    html.find("#nbBrins").change(event => {
      this.potionData.nbBrins = Misc.toInt(event.currentTarget.value); 
    });
  }

  /* -------------------------------------------- */
  async fabriquer() {
    this.actor.fabriquerPotion( this.potionData );
    this.close();
  }
}