package uk.antiperson.stackmob.listeners.entity;

import org.bukkit.entity.LivingEntity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.metadata.FixedMetadataValue;
import uk.antiperson.stackmob.StackMob;
import uk.antiperson.stackmob.api.entity.StackTools;
import uk.antiperson.stackmob.api.tools.GlobalValues;

public class ReceivedDamageEvent implements Listener {

    private StackMob sm;
    public ReceivedDamageEvent(StackMob sm) {
        this.sm = sm;
    }

    @EventHandler
    public void onDamageReceived(EntityDamageEvent event) {
        if(event.getEntity() instanceof LivingEntity){
            if(StackTools.hasValidStackData(event.getEntity())){
                LivingEntity entity = (LivingEntity) event.getEntity();
                if(sm.getCustomConfig().getBoolean("kill-step-damage.enabled")){
                    double healthAfter = entity.getHealth() - event.getFinalDamage();
                    if(healthAfter <= 0){
                        entity.setMetadata(GlobalValues.LEFTOVER_DAMAGE, new FixedMetadataValue(sm, Math.abs(healthAfter)));
                    }
                }

                if(!sm.getCustomConfig().getStringList("multiply-damage-received.cause-blacklist")
                        .contains(event.getCause().toString())) {
                    if(event.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK){
                        return;
                    }
                    int stackSize = StackTools.getSize(entity);
                    double extraDamage = event.getDamage() + ((event.getDamage() * (stackSize - 1) * 0.25));
                    event.setDamage(extraDamage);
                }
            }
        }
    }
}