package com.draco18s.artifacts.components;

import io.netty.buffer.Unpooled;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;

import com.draco18s.artifacts.DragonArtifacts;
import com.draco18s.artifacts.api.interfaces.IArtifactComponent;
import com.draco18s.artifacts.components.UtilsForComponents.Flags;
import com.draco18s.artifacts.network.CToSMessage;
import com.draco18s.artifacts.network.PacketHandlerServer;

public class ComponentAdrenaline extends BaseComponent {

	@Override
	public String getRandomTrigger(Random rand, boolean isArmor) {
		if(isArmor)
			return "onTakeDamage";
		return "";
	}

	@Override
	public void onArmorTickUpdate(World world, EntityPlayer player, ItemStack itemStack, boolean worn) {
		int delay = itemStack.stackTagCompound.getInteger("adrenDelay_armor");
		if(!world.isRemote && delay > 0) {
			if(delay == 198) {
				//System.out.println("Crashing!");
				player.addPotionEffect(new PotionEffect(4, 200, 1));
				player.addPotionEffect(new PotionEffect(17, 200, 0));
			}
		}
	}

	@Override
	public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean advTooltip) {
		par3List.add("Activates several potion effects after taking damage");
	}

	@Override
	public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, String trigger, boolean advTooltip) {
		par3List.add(StatCollector.translateToLocal("effect.Activates several potion effects"));
		par3List.add("   " + StatCollector.translateToLocal("tool."+trigger));
	}
	
	@Override
	public void onTakeDamage(ItemStack itemStack, LivingHurtEvent event, boolean isWornArmor) {
		//System.out.println("Player has been damaged!");
		if(isWornArmor && !event.isCanceled()) {
			if(itemStack.stackTagCompound.getInteger("adrenDelay_armor") <= 0 && event.entity instanceof EntityPlayer) {
				//System.out.println("Attempting to apply potion effects to player.");
				EntityPlayer p = (EntityPlayer)event.entity;
				//if(p.getHealth() <= 4) {
					//System.out.println("Applying Potion Effects.");
					itemStack.stackTagCompound.setInteger("adrenDelay_armor", 300);
					
					p.addPotionEffect(new PotionEffect(1, 100, 1));
					p.addPotionEffect(new PotionEffect(5, 100, 1));
					p.addPotionEffect(new PotionEffect(11, 100, 2));
					
				//}
			}
		}
	}

	@Override
	public String getPreAdj(Random rand) {
		return "Brawling";
	}

	@Override
	public String getPostAdj(Random rand) {
		return "of Rage";
	}

	@Override
	public int getTextureBitflags() {
		return Flags.CHESTPLATE;//1024
	}

	@Override
	public int getNegTextureBitflags() {
		
		return ~(Flags.CHESTPLATE | Flags.LEGGINGS);//2815;//6911;
	}
}