package com.gmail.nuclearcat1337.kits;

import java.util.ArrayList;
import java.util.List;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import com.gmail.nuclearcat1337.anniPro.anniGame.AnniPlayer;
import com.gmail.nuclearcat1337.anniPro.kits.KitUtils;
import com.gmail.nuclearcat1337.anniPro.kits.Loadout;
import com.gmail.nuclearcat1337.base.SpecialItemKit;


public class Thor extends SpecialItemKit
{
	@Override
	protected void onInitialize()
	{
		// TODO Auto-generated method stub
		
	}

	@Override
	protected ItemStack specialItem()
	{
		ItemStack hammer  = KitUtils.addSoulbound(new ItemStack(Material.GOLD_AXE));			
		ItemMeta meta = hammer.getItemMeta();
		meta.setDisplayName(getSpecialItemName()+" "+ChatColor.GREEN+"READY");
		hammer.setItemMeta(meta);
		return hammer;
	}

	@Override
	protected String defaultSpecialItemName()
	{
		return ChatColor.GOLD+"Hammer";
	}

	@Override
	protected boolean isSpecialItem(ItemStack stack)
	{
		if(stack != null && stack.hasItemMeta() && stack.getItemMeta().hasDisplayName())
		{
			String name = stack.getItemMeta().getDisplayName();
			if(name.contains(getSpecialItemName()) && KitUtils.isSoulbound(stack))
				return true;
		}
		return false;
	}

	@Override
	protected boolean performSpecialAction(Player player, AnniPlayer p)
	{
		player.getWorld().strikeLightning(player.getLocation());
		return true;
	}
	
	@EventHandler(priority= EventPriority.NORMAL)
	public void checkStrike(EntityDamageEvent event)
	{
		if(event.getEntityType() == EntityType.PLAYER && event.getCause() == DamageCause.LIGHTNING)
		{
			AnniPlayer player = AnniPlayer.getPlayer(event.getEntity().getUniqueId());
			if(player != null && !player.getKit().equals(this))
			{
				Object obj = player.getData("LH");
				if(obj != null)
				{
					Long l = (Long)obj;
					if(System.currentTimeMillis()-l <= 30000)
					{
						event.setCancelled(true);
						player.setData("LH", null);
						return;
					}
				}
				event.setDamage(4);
				player.setData("LH", System.currentTimeMillis());
			}
		}
	}

	@Override
	protected long getDelayLength()
	{
		return 120000;
	}

	@Override
	protected boolean useDefaultChecking()
	{
		return true;
	}

	@Override
	protected String getInternalName()
	{
		return "Thor";
	}

	@Override
	protected ItemStack getIcon()
	{
		return new ItemStack(Material.GOLD_AXE);
	}

	@Override
	protected List<String> getDefaultDescription()
	{
		List<String> l = new ArrayList<String>();
		addToList(l,new String[]
				{
					aqua+"You are the hammer.",
					aqua+"",
					aqua+"You are not afraid of",
					aqua+"lava and fire because",
					aqua+"you are immune, but your",
					aqua+"enemies are not.",
					aqua+"",
					aqua+"Every hit you land has",
					aqua+"a chance of igniting your",
					aqua+"enemy.",
				});
		return l;
	}

	@Override
	protected Loadout getFinalLoadout()
	{
		return new Loadout().addStoneSword().addWoodPick().addWoodAxe().addItem(super.getSpecialItem()).addNavCompass().finalizeLoadout();
	}

	@Override
	public void cleanup(Player arg0)
	{
		
	}

}