package uk.antiperson.stackmob.listeners.chunk;

import org.bukkit.entity.Entity;
import org.bukkit.entity.Mob;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.world.ChunkLoadEvent;
import uk.antiperson.stackmob.api.IStackMob;
import uk.antiperson.stackmob.api.entity.StackTools;
import uk.antiperson.stackmob.api.tools.GlobalValues;

public class LoadEvent implements Listener {

    private IStackMob sm;

    public LoadEvent(IStackMob sm) {
        this.sm = sm;
    }

    @EventHandler
    public void onChunkLoad(ChunkLoadEvent e) {
        if(sm.getCustomConfig().getStringList("no-stack-worlds")
                .contains(e.getWorld().getName())){
            return;
        }
        for(Entity currentEntity : e.getChunk().getEntities()){
            if(!(currentEntity instanceof Mob)){
                continue;
            }
            // Check if has been cached.
            if(sm.getCache().containsKey(currentEntity.getUniqueId())){
                int cacheSize = sm.getCache().get(currentEntity.getUniqueId());
                sm.getCache().remove(currentEntity.getUniqueId());
                StackTools.setSize(currentEntity, cacheSize);
                continue;
            }
            if(currentEntity.getCustomName() != null){
                continue;
            }
            if(sm.getTraitManager().checkTraits(currentEntity)){
                continue;
            }
            if(sm.getHookManager().cantStack(currentEntity)){
                continue;
            }
            if(sm.getLogic().doChecks(currentEntity)){
                continue;
            }
            StackTools.setSize(currentEntity, GlobalValues.NOT_ENOUGH_NEAR);
        }
    }

}