import { HtmlUtility } from "./html-utility.js";

export class DialogItemVente extends Dialog {

  static async display(item, callback) {
    const quantite = item.isConteneur() ? 1 : item.system.quantite;
    const venteData = {
      item: item,
      alias: item.actor?.name ?? game.user.name,
      vendeurId: item.actor?.id,
      prixOrigine: item.system.cout,
      prixUnitaire: item.system.cout,
      prixLot: item.system.cout,
      tailleLot: 1,
      quantiteNbLots: quantite,
      quantiteMaxLots: quantite,
      quantiteMax: quantite ,
      quantiteIllimite: !item.isOwned,
      isOwned: item.isOwned,
    };
    const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-vente.html`, venteData);
    return new DialogItemVente(venteData, html, callback).render(true);
  }

  constructor(venteData, html, callback) {
    let options = { classes: ["dialogvente"], width: 400, height: 'fit-content', 'z-index': 99999 };

    let conf = {
      title: "Proposer",
      content: html,
      default: "proposer",
      buttons: { "proposer": { label: "Proposer", callback: it => { this.onProposer(it); } } }
    };

    super(conf, options);
    this.callback = callback;
    this.venteData = venteData;
  }

  activateListeners(html) {
    super.activateListeners(html);
    this.html = html;
    HtmlUtility._showControlWhen(this.html.find(".quantiteNbLots"), !this.venteData.quantiteIllimite)

    this.html.find(".tailleLot").change(event => this.setTailleLot(Number(event.currentTarget.value)));
    this.html.find(".quantiteNbLots").change(event => this.setNbLots(Number(event.currentTarget.value)));
    this.html.find(".quantiteIllimite").change(event => this.setQuantiteIllimite(event.currentTarget.checked));
    this.html.find(".prixLot").change(event => this.setPrixLot(Number(event.currentTarget.value)));
  }

  async onProposer(it) {
    await this.html.find(".tailleLot").change();
    await this.html.find(".quantiteNbLots").change();
    await this.html.find(".quantiteIllimite").change();
    await this.html.find(".prixLot").change();
    this.callback(this.venteData);
  }  

  /* -------------------------------------------- */
  setPrixLot(prixLot) {
    this.venteData.prixLot = prixLot;
  }

  setTailleLot(tailleLot) {
    // recalculer le prix du lot
    if (tailleLot != this.venteData.tailleLot) {
      this.venteData.prixLot = (tailleLot * this.venteData.prixOrigine).toFixed(2);
      this.html.find(".prixLot").val(this.venteData.prixLot);
    }
    this.venteData.tailleLot = tailleLot;
    if (this.venteData.isOwned) {
      // recalculer le nombre de lots max
      this.venteData.quantiteMaxLots = Math.floor(this.venteData.quantiteMax / tailleLot);
      this.venteData.quantiteNbLots = Math.min(this.venteData.quantiteMaxLots, this.venteData.quantiteNbLots);
      this.html.find(".quantiteNbLots").val(this.venteData.quantiteNbLots);
      this.html.find(".quantiteNbLots").attr("max", this.venteData.quantiteMaxLots)
    }
  }

  setNbLots(nbLots) {
    if (this.venteData.isOwned) {
      nbLots = Math.max(0, Math.min(nbLots, this.venteData.quantiteMaxLots));
    }
    this.venteData.quantiteNbLots = nbLots;
    this.html.find(".quantiteNbLots").val(this.venteData.quantiteNbLots);
  }

  setQuantiteIllimite(checked) {
    this.venteData.quantiteIllimite = checked;
    this.html.find(".label-quantiteIllimite").text(this.venteData.quantiteIllimite ? "Illimités" : "disponibles");
    HtmlUtility._showControlWhen(this.html.find(".quantiteNbLots"), !this.venteData.quantiteIllimite)
  }
}