import { DialogItemAchat } from "../dialog-item-achat.js";
import { RdDItem } from "../item.js";
import { RdDSheetUtility } from "../rdd-sheet-utility.js";
import { RdDUtility } from "../rdd-utility.js";
import { RdDBaseActorSheet } from "./base-actor-sheet.js";
import { RdDCommerce } from "./commerce.js";

/**
 * Extend the basic ActorSheet with some very simple modifications
 * @extends {ActorSheet}
 */
export class RdDCommerceSheet extends RdDBaseActorSheet {

  /** @override */
  static get defaultOptions() {
    return mergeObject(super.defaultOptions, {
      classes: ["rdd", "sheet", "actor"],
      template: "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-actor-sheet.html",
      width: 600,
      height: 720,
      tabs: [],
      dragDrop: [{ dragSelector: ".item-list .item", dropSelector: undefined }]
    });
  }
  get title() {
    if (this.actor.token && this.actor.token != this.actor.prototypeToken) {
      return this.actor.token.name;
    }
    return super.title
  }

  async getData() {
    const formData = await super.getData();
    if (this.actor.token && this.actor.token != this.actor.prototypeToken) {
      mergeObject(formData,
        {
          title: this.actor.token.name,
          token: {
            img: this.actor.token.texture.src
          }
        },
        { overwrite: true });

    }
    return formData;
  }
  /* -------------------------------------------- */
  /** @override */
  activateListeners(html) {
    super.activateListeners(html);

    this.html.find('a.item-acheter').click(async event => await this.vente(this.getItem(event)));

    if (!this.options.editable) return;

    this.html.find('a.item-quantite-moins').click(async event => await this.getItem(event)?.quantiteIncDec(-1, { supprimerSiZero: false }));
    this.html.find('a.item-quantite-plus').click(async event => await this.getItem(event)?.quantiteIncDec(1));
    this.html.find('input.item-quantite').change(async event => {
      const newQuantite = Math.max(0, Number.parseInt(this.html.find(event.currentTarget).val()));
      await this.getItem(event)?.update({ "system.quantite": newQuantite });
    })
    this.html.find('input.item-cout').change(async event => {
      const newCout = Math.max(0, Number(this.html.find(event.currentTarget).val()));
      await this.getItem(event)?.update({ "system.cout": newCout });
    })
  }

  getTypesInventaire() {
    return RdDItem.getItemTypesInventaire('all');
  }


  async vente(item) {
    const acheteur = RdDUtility.getSelectedActor();
    if (!acheteur) {
      ui.notifications.warn(`Pas d'acheteur sélectionné`);
      return;
    }
    const disponible = this.actor.getQuantiteDisponible(item)
    if (disponible == 0) {
      ui.notifications.warn(`${this.name} n'a plus de ${item.name} en vente`);
      return;
    }

    await DialogItemAchat.onAcheter({
      item,
      vendeur: this.actor,
      acheteur,
      quantiteIllimite: disponible == undefined,
      nbLots: disponible ?? 1,
      tailleLot: 1,
      prixLot: item.calculerPrixCommercant()
    });
  }
}
