package net.demilich.metastone.game.spells.aura;

import java.util.List;

import net.demilich.metastone.game.Attribute;
import net.demilich.metastone.game.GameContext;
import net.demilich.metastone.game.Player;
import net.demilich.metastone.game.entities.Entity;
import net.demilich.metastone.game.events.GameEvent;
import net.demilich.metastone.game.events.GameEventType;
import net.demilich.metastone.game.spells.desc.SpellDesc;
import net.demilich.metastone.game.spells.desc.aura.AuraDesc;
import net.demilich.metastone.game.spells.trigger.EnrageChangedTrigger;
import net.demilich.metastone.game.targeting.EntityReference;

public class EnrageAura extends Aura {

	private boolean active;

	public EnrageAura(AuraDesc desc) {
		this(desc.getApplyEffect(), desc.getRemoveEffect(), desc.getTarget());
	}

	private EnrageAura(SpellDesc applyAuraEffect, SpellDesc removeAuraEffect, EntityReference targetSelection) {
		super(new EnrageChangedTrigger(), applyAuraEffect, removeAuraEffect, targetSelection);
	}

	@Override
	protected boolean affects(GameContext context, Player player, Entity target, List<Entity> resolvedTargets) {
		return active && super.affects(context, player, target, resolvedTargets);
	}

	@Override
	public void onGameEvent(GameEvent event) {
		if (event.getEventType() == GameEventType.ENRAGE_CHANGED) {
			active = event.getEventTarget().hasAttribute(Attribute.ENRAGED);
		}
		super.onGameEvent(event);
	}

}
