import { ENTITE_INCARNE } from "../constants.js";
import { TYPES } from "../item.js";
import { STATUSES } from "../settings/status-effects.js";
import { RdDBaseActorSang } from "./base-actor-sang.js";

export class RdDCreature extends RdDBaseActorSang {

  static get defaultIcon() {
    return "systems/foundryvtt-reve-de-dragon/icons/creatures/bramart.svg";
  }

  isCreature() { return true }

  canReceive(item) {
    return item.type == TYPES.competencecreature || item.isInventaire();
  }

  async remiseANeuf() {
    await this.removeEffects(e => true);
    await this.supprimerBlessures(it => true);
    await this.update({
      'system.sante.endurance.value': this.system.sante.endurance.max,
      'system.sante.vie.value': this.system.sante.vie.max,
      'system.sante.fatigue.value': 0
    });
  }

  async finDeRoundBlessures() {
    const nbGraves = this.filterItems(it => it.isGrave(), 'blessure').length;
    if (nbGraves > 0) {
      // Gestion blessure graves : -1 pt endurance par blessure grave
      await this.santeIncDec("endurance", -nbGraves);
    }
  }

  isEffectAllowed(effectId) {
    return [STATUSES.StatusComma].includes(effectId);
  }

  isEntiteAccordee(attacker) {
    if (this.isEntite([ENTITE_INCARNE])) {
      let resonnance = this.system.sante.resonnance
      return (resonnance.actors.find(it => it == attacker.id))
    }
    return true
  }

  /* -------------------------------------------- */
  async setEntiteReveAccordee(attacker) {
    if (this.isEntite([ENTITE_INCARNE])) {
      let resonnance = duplicate(this.system.sante.resonnance);
      if (resonnance.actors.find(it => it == attacker.id)) {
        // déjà accordé
        return;
      }
      await this.update({ "system.sante.resonnance": [...resonnance, attacker.id] });
    }
    else {
      super.setEntiteReveAccordee(attacker)
    }
  }

}