package projectzombie.items;

import gl_engine.vec.Vec2d;
import projectzombie.entity.player.EntityPlayer;
import projectzombie.init.Models;
import projectzombie.items.modifier.ItemModifier;
import projectzombie.items.modifier.ItemModifierClickCooldown;
import projectzombie.items.modifier.ItemModifierDamage;
import projectzombie.items.modifier.ItemModifierMeta;
import projectzombie.items.modifier.ItemModifierTimer;
import projectzombie.items.modifier.ItemModifierTimerPaused;
import projectzombie.model.ModelItem;
import projectzombie.util.ItemStack;
import projectzombie.world.layer.Layer;

public class ItemTorch extends Item
{

	@Override
	public ModelItem getModel(ItemStack stack)
	{
		if(ItemModifierMeta.getStackMeta(stack) == 1) {
			return Models.ITEM_TORCH_LIT;
		}
		
		else {
			return Models.ITEM_TORCH_UNLIT;
		}
	}
	
	@Override
	public double getDamage(ItemStack stack)
	{
		if(ItemModifierMeta.getStackMeta(stack) == 0)
		{
			ItemModifierTimerPaused timer = (ItemModifierTimerPaused)stack.getModifier(ItemModifierTimerPaused.class);
			
			if(timer == null) {
				return 0;
			}
			
			return timer.getDamage();
		}
		
		else
		{
			ItemModifierTimer timer = (ItemModifierTimer)stack.getModifier(ItemModifierTimer.class);
			
			if(timer == null) {
				return 0;
			}
			
			return timer.getDamage();
		}
	}
	
	@Override
	public boolean onPlayerRightClick(ItemStack stack, Layer layer, EntityPlayer player, Vec2d place_pos)
	{
		ItemModifierClickCooldown cooldown = (ItemModifierClickCooldown)
				stack.getModifier(ItemModifierClickCooldown.class);
		
		if(cooldown != null && !cooldown.canClick()) {
			return true;
		}
		
		else if(cooldown == null) {
			cooldown = new ItemModifierClickCooldown(500);
		}
		
		cooldown.click();
		
		if(ItemModifierMeta.getStackMeta(stack) == 0)
		{
			ItemModifierTimerPaused timer_p = (ItemModifierTimerPaused)
					stack.getModifier(ItemModifierTimerPaused.class);
			ItemModifierTimer timer;
			
			if(timer_p == null) {
				timer = new ItemModifierTimer(12000);
			}
			
			else {
				timer = timer_p.resume();
			}
			
			stack.modifiers = new ItemModifier[] {new ItemModifierMeta(1), timer, cooldown};
		}
		
		else
		{
			ItemModifierTimer timer = (ItemModifierTimer)stack.getModifier(ItemModifierTimer.class);
			
			if(timer == null) {
				timer = new ItemModifierTimer(12000);
			}
			
			stack.modifiers = new ItemModifier[] {new ItemModifierMeta(0), timer.pause(), cooldown};
		}
		
		return true;
	}
	
	@Override
	public boolean isEmpty(ItemStack stack)
	{
		if(ItemModifierMeta.getStackMeta(stack) != 1) {
			return false;
		}
		
		ItemModifierTimer timer = (ItemModifierTimer)stack.getModifier(ItemModifierTimer.class);
		
		if(timer == null) {
			return false;
		}
		
		return timer.getDamage() > 1;
	}
	
	@Override
	public double getLightLevel(ItemStack stack) {
		return ItemModifierMeta.getStackMeta(stack) == 1 ? 1 : 0;
	}

	@Override
	public String getName(ItemStack stack) {
		return "Torch";
	}

}
