import { Misc } from "./misc.js";
import { LOG_HEAD, SYSTEM_RDD } from "./constants.js";

const MONNAIES_STANDARD = [
  {
    name: "Etain (1 denier)", type: 'monnaie',
    img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_etain_poisson.webp",
    system: { quantite: 0, valeur_deniers: 1, encombrement: 0.001, description: "" }
  },
  {
    name: "Bronze (10 deniers)", type: 'monnaie',
    img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_bronze_epees.webp",
    system: { quantite: 0, valeur_deniers: 10, encombrement: 0.002, description: "" }
  },
  {
    name: "Argent (1 sol)", type: 'monnaie',
    img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_argent_sol.webp",
    system: { quantite: 0, valeur_deniers: 100, encombrement: 0.003, description: "" }
  },
  {
    name: "Or (10 sols)", type: 'monnaie',
    img: "systems/foundryvtt-reve-de-dragon/icons/objets/piece_or_sol.webp",
    system: { quantite: 0, valeur_deniers: 1000, encombrement: 0.004, description: "" }
  }
]
const VALEURS_STANDARDS = MONNAIES_STANDARD.map(it =>it.system.valeur_deniers);

export class Monnaie {

  static isSystemMonnaie(item, items) {
    if (item.type == 'monnaie')    {
      const valeur = item.system.valeur_deniers;
      if (VALEURS_STANDARDS.includes(valeur)) {
        const monnaiesDeValeur = items.filter(it => it.type == 'monnaie' && it.system.valeur_deniers == valeur)
        return monnaiesDeValeur.length<=1;
      }
    }
    return false;
  }

  static monnaiesData() {
    return MONNAIES_STANDARD;
  }

  static monnaiesManquantes(actor) {
    const disponibles = actor.itemTypes['monnaie'];
    const manquantes = MONNAIES_STANDARD.filter(standard => !disponibles.find(disponible => Monnaie.deValeur(disponible, standard.system?.valeur_deniers)));
    if (manquantes.length > 0) {
      console.error(`${LOG_HEAD} monnaiesManquantes pour ${actor.name}`, manquantes, ' avec monnaies', disponibles, MONNAIES_STANDARD);
    }
    return manquantes;
  }

  static deValeur(monnaie, valeur) {
    return valeur == monnaie.system.valeur_deniers
  }

  static arrondiDeniers(sols) {
    return sols.toFixed(2);
  }

  static triValeurDenier() {
    return Misc.ascending(item => item.system.valeur_deniers)
  }
}
