import { renderTemplate, 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.deepClone(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)
    if (vente.nbLots <= quantite) {
      ChatUtility.removeChatMessageId(chatMessageIdVente);
    }
    else {
      vente.nbLots = 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.hbs', vente)
      await chatMessage.update({ content: html }, { render: true })
    }
  }

  static async displayAchatVente(vente) {
    const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/chat-vente-item.hbs', 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
    })
  }
}