import { SYSTEM_RDD } from "../constants.js";
import { RdDUtility } from "../rdd-utility.js";

const DETAIL_VENTE = 'detailVente';
const NB_LOTS = 'nbLotss';

export class ChatVente {

  static getDetailVente(chatMessageId) {
    const chatMessage = game.messages.get(chatMessageId)
    if (!chatMessage) {
      return undefined;
    }
    const nbLots = chatMessage.getFlag(SYSTEM_RDD, NB_LOTS)
    const detail = foundry.utils.duplicate(chatMessage.getFlag(SYSTEM_RDD, DETAIL_VENTE))
    if (!detail.item) {
      ui.notifications.warn("Impossible d'acheter: informations sur l'objet manquantes")
      return undefined;
    }

    const vendeur = detail.vendeurId ? game.actors.get(detail.vendeurId) : undefined;
    return foundry.utils.mergeObject(detail,
      {
        alias: vendeur?.name ?? game.user.name,
        vendeur,
        nbLots: nbLots,
        chatMessageIdVente: chatMessageId
      })
  }

  static getDetailAchatVente(chatMessageId) {
    const acheteur = RdDUtility.getSelectedActor()
    const detail = ChatVente.getDetailVente(chatMessageId)
    if (!acheteur && !detail.vendeur) {
      ui.notifications.info("Pas d'acheteur ni de vendeur, aucun changement");
      return undefined;
    }
    return foundry.utils.mergeObject(detail, { acheteur })
  }

  static async diminuerQuantiteAchatVente(chatMessageId, quantite) {
    const chatMessage = game.messages.get(chatMessageId)
    const vente = ChatVente.getDetailVente(chatMessageId)
    vente.nbLots = Math.max(0, vente.nbLots - quantite)
    await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots)

    const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente);
    chatMessage.update({ content: html });
    chatMessage.render(true);
  }

  static async displayAchatVente(vente) {
    const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.html', vente);
    const chatMessage = await ChatMessage.create(RdDUtility.chatDataSetup(html))
    await chatMessage.setFlag(SYSTEM_RDD, NB_LOTS, vente.nbLots)
    await chatMessage.setFlag(SYSTEM_RDD, DETAIL_VENTE, {
      item: vente.item,
      properties: vente.item.getProprietes(),
      vendeurId: vente.vendeurId,
      tailleLot: vente.tailleLot,
      quantiteIllimite: vente.quantiteIllimite,
      prixLot: vente.prixLot
    })
  }
}