import { RdDActor } from "./actor.js";
import { HtmlUtility } from "./html-utility.js";
import { Misc } from "./misc.js";
import { RdDUtility } from "./rdd-utility.js";

export class DialogItemAchat extends Dialog {

  static async onButtonAcheter(event) {
    let jsondata = event.currentTarget.attributes['data-jsondata']?.value;
    if (!jsondata) {
      ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes")
      return;
    }
    const vendeurId = event.currentTarget.attributes['data-vendeurId']?.value;
    const vendeur = vendeurId ? game.actors.get(vendeurId) : undefined;
    const acheteur = RdDUtility.getSelectedActor();

    if (!acheteur && !vendeur) {
      ui.notifications.info("Pas d'acheteur ni de vendeur, aucun changement");
      return;
    }

    const chatMessageIdVente = RdDUtility.findChatMessageId(event.currentTarget);
    const itemData = JSON.parse(jsondata);
    const prixLot = event.currentTarget.attributes['data-prixLot']?.value ?? 0;
    let venteData = {
      item: itemData,
      vendeurId: vendeurId,
      vendeur: Misc.data(vendeur),
      acheteur: Misc.data(acheteur),
      tailleLot: event.currentTarget.attributes['data-tailleLot']?.value ?? 1,
      quantiteIllimite : event.currentTarget.attributes['data-quantiteIllimite']?.value == 'true',
      quantiteNbLots: event.currentTarget.attributes['data-quantiteNbLots']?.value,
      nombreLots: 1,
      prixLot: prixLot,
      prixTotal: prixLot,
      isVente: prixLot > 0
    };
    const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData);
    const dialog = new DialogItemAchat(html, vendeur, acheteur, venteData, chatMessageIdVente);
    dialog.render(true);
  }

  constructor(html, vendeur, acheteur, venteData, chatMessageIdVente) {
    let options = { classes: ["dialogachat"], width: 400, height: 300, 'z-index': 99999 };

    const actionAchat = venteData.prixLot > 0 ? "Acheter" : "Prendre";
    let conf = {
      title: actionAchat,
      content: html,
      default: actionAchat,
      buttons: {
        [actionAchat]: { label: actionAchat, callback: it => { this.onAchat(); } },
        "decliner": { label: "Décliner", callback: it => { } }
      }
    };

    super(conf, options);

    this.vendeur = vendeur;
    this.acheteur = acheteur;
    this.chatMessageIdVente = chatMessageIdVente;
    this.venteData = venteData;
  }

  async onAchat() {
    (this.vendeur ?? this.acheteur).achatVente(
      this.vendeur?.id,
      this.acheteur?.id,
      this.venteData,
      this.chatMessageIdVente
    );
  }

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

    html.find(".nombreLots").change(event => this.setnombreLots(Number(event.currentTarget.value)));
  }

  setnombreLots(nombreLots) {
    this.venteData.nombreLots = nombreLots;
    this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2);
    $(".prixTotal").text(this.venteData.prixTotal);
  }

}