package com.magmaguy.elitemobs.mobpowers.miscellaneouspowers;

import com.magmaguy.elitemobs.EntityTracker;
import com.magmaguy.elitemobs.MetadataHandler;
import com.magmaguy.elitemobs.mobconstructor.EliteMobEntity;
import com.magmaguy.elitemobs.mobpowers.minorpowers.MinorPower;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.scheduler.BukkitRunnable;

import java.util.HashSet;

public class Corpse extends MinorPower implements Listener {

    @Override
    public void applyPowers(Entity entity) {

    }

    private static HashSet<Block> blocks = new HashSet<>();

    public static void clearBlocks() {
        for (Block block : blocks)
            if (block.getType().equals(Material.BONE_BLOCK))
                block.setType(Material.AIR);

        blocks.clear();
    }

    @EventHandler
    public void onDeath(EntityDeathEvent event) {

        EliteMobEntity eliteMobEntity = EntityTracker.getEliteMobEntity(event.getEntity());
        if (eliteMobEntity == null) return;

        if (!eliteMobEntity.hasPower(this)) return;

        if (!event.getEntity().getLocation().getBlock().getType().equals(Material.AIR)) return;

        blocks.add(event.getEntity().getLocation().getBlock());
        event.getEntity().getLocation().getBlock().setType(Material.BONE_BLOCK);

        new BukkitRunnable() {
            @Override
            public void run() {
                blocks.remove(event.getEntity().getLocation().getBlock());
                if (event.getEntity().getLocation().getBlock().getType().equals(Material.BONE_BLOCK))
                    event.getEntity().getLocation().getBlock().setType(Material.AIR);
            }
        }.runTaskLater(MetadataHandler.PLUGIN, 20 * 60 * 2);

    }

    @EventHandler
    public void onMine(BlockBreakEvent event) {

        if (blocks.contains(event.getBlock()))
            event.setDropItems(false);

    }

}