import { Grammar } from "../grammar.js";
import { RdDItem } from "../item.js";
import { SystemCompendiums } from "../settings/system-compendiums.js";
import { ACTION_ITEM_ENCHANTER } from "../enchantement/dialog-enchanter.js";
// --- Actions sur les "potions"
const _CONSOMMER_POTION = {
  code: 'item-potion-consommer', label: 'Consommer', icon: it => 'fa-solid fa-vial',
  optionsFilter: options => options.editable,
  action: (item, actor) => actor.consommerPotion(item)
}
/**
 * Item pour gérer les potions
 */
export class RdDItemPotion extends RdDItem {
  static async herbesSoins() {
    return await RdDItemPotion.$listHerbes(it => Grammar.equalsInsensitive(it.system.categorie, 'Soin') && it.system.niveau > 0)
  }
  static async herbesRepos() {
    return await RdDItemPotion.$listHerbes(it => Grammar.equalsInsensitive(it.system.categorie, 'Repos') && it.system.niveau > 0)
  }
  static async $listHerbes(filter) {
    const herbes = await SystemCompendiums.getWorldOrCompendiumItems('herbe', 'faune-flore-mineraux');
    return herbes.filter(filter)
  }
  static get defaultIcon() {
    return "systems/foundryvtt-reve-de-dragon/icons/objets/liqueur_de_bagdol.webp"
  }
  get isEnchantementPossible() {
    return this.system.etat == 'Liquide'
  }
  itemSpecificActions() {
    return [_CONSOMMER_POTION, ACTION_ITEM_ENCHANTER]
  }
  prepareDerivedData() {
    super.prepareDerivedData()
    this.system.puissance = this.system.magique ? this.calculPuissance() : 0
  }
  getUtilisation() {
    switch (this.system.categorie) {
      case 'Alchimie': case 'Autre': case 'AlchimieAutre':
        // TODO: distinguer les remèdes alchimiques enchantables/non
        return 'alchimie'
      case 'Cuisine':
        return 'cuisine'
      case 'Remede': case 'Repos': case 'Soin':
        return 'soins'
    }
    return ''
  }
  getProprietes() {
    const proprietes = [
      `Rareté: ${this.system.rarete} `,
      `Catégorie: ${this.system.categorie}`,
      `Etat: ${this.system.etat}`
    ]
    const proprietesMagiques = this.system.magique ? [
      `Enchantée  ${this.system.purifie ? ', purifiée' : ''} ${this.system.prpermanent ? 'permanente' : ''} `,
      `Points de rêve: ${this.system.pr}`,
    ] : []
    return proprietes
      .concat(proprietesMagiques)
      .concat(this._inventaireTemplateChatData())
      .filter(it => it != undefined)
  }
  perteReveChateauDormant() {
    if (this.system.magique && !this.system.prpermanent && this.system.pr > 0) {
      const nouveaupr = Math.max(this.system.pr - 1, 0)
      return {
        alias: this.parent.getAlias(),
        item: this,
        nouveaupr: nouveaupr,
        update: {
          _id: this.id,
          'system.pr': nouveaupr,
          'system.magique': nouveaupr > 0
        }
      }
    }
    return undefined
  }
  calculPuissance() { return this.system.herbebonus * this.system.pr }
  static buildHerbesList(listeHerbes, max) {
    let list = {}
    for (let herbe of listeHerbes) {
      let brins = max - herbe.system.niveau;
      list[herbe.name] = `${herbe.name} (Bonus: ${herbe.system.niveau}, Brins: ${brins})`;
    }
    list['Autre'] = 'Autre (Bonus: variable, Brins: variable)'
    return list;
  }
}