package com.hbm.items.food;

import java.util.List;

import com.hbm.config.VersatileConfig;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.extprop.HbmLivingProps;
import com.hbm.interfaces.Spaghetti;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
import com.hbm.util.ContaminationUtil;
import com.hbm.util.ContaminationUtil.ContaminationType;
import com.hbm.util.ContaminationUtil.HazardType;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;

@Spaghetti("wtf is this shit")
public class ItemEnergy extends Item {
	
	private Item container = null;
	private Item cap = null;
	private boolean requiresOpener = false;
	
	public ItemEnergy() {
		this.setCreativeTab(MainRegistry.consumableTab);
	}
	
	public ItemEnergy makeCan() {
		this.container = ModItems.can_empty;
		this.cap = ModItems.ring_pull;
		this.requiresOpener = false;
		this.setContainerItem(this.container);
		return this;
	}
	
	public ItemEnergy makeBottle(Item bottle, Item cap) {
		this.container = bottle;
		this.cap = cap;
		this.requiresOpener = true;
		this.setContainerItem(this.container);
		this.setCreativeTab(MainRegistry.consumableTab);
		return this;
	}

	@Override
	public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) {

		if(!player.capabilities.isCreativeMode) {
			--stack.stackSize;
		}

		if(!world.isRemote) {

			if(player instanceof FakePlayer) {
				world.newExplosion(player, player.posX, player.posY, player.posZ, 5F, true, true);
				return super.onEaten(stack, world, player);
			}
			
			VersatileConfig.applyPotionSickness(player, 5);

			if(this == ModItems.can_smart) {
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 0));
			}
			if(this == ModItems.can_creature) {
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 0));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 30 * 20, 1));
			}
			if(this == ModItems.can_redbomb) {
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 0));
				player.addPotionEffect(new PotionEffect(Potion.field_76444_x.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.jump.id, 30 * 20, 1));
			}
			if(this == ModItems.can_mrsugar) {
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 0));
				player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.jump.id, 30 * 20, 2));
			}
			if(this == ModItems.can_overcharge) {
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 0));
			}
			if(this == ModItems.can_luna) {
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 30 * 20, 2));
			}
			if(this == ModItems.can_bepis) {
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 3));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 3));
			}
			if(this == ModItems.can_breen) {
				player.addPotionEffect(new PotionEffect(Potion.confusion.id, 30 * 20, 0));
			}
			if(this == ModItems.can_mug) {
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 3 * 60 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.regeneration.id, 60 * 20, 2));
			}
			if(this == ModItems.chocolate_milk) {
				ExplosionLarge.explode(world, player.posX, player.posY, player.posZ, 50, true, false, false);
			}
			if(this == ModItems.bottle_nuka) {
				player.heal(4F);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 30 * 20, 1));
				ContaminationUtil.contaminate(player, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 5.0F);
			}
			if(this == ModItems.bottle_cherry) {
				player.heal(6F);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 0));
				player.addPotionEffect(new PotionEffect(Potion.jump.id, 30 * 20, 2));
				ContaminationUtil.contaminate(player, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 5.0F);
			}
			if(this == ModItems.bottle_quantum) {
				player.heal(10F);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 1));
				ContaminationUtil.contaminate(player, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 15.0F);
			}
			if(this == ModItems.bottle2_korl) {
				player.heal(6);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30 * 20, 2));
			}
			if(this == ModItems.bottle2_fritz) {
				player.heal(6);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 30 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.jump.id, 30 * 20, 2));
			}
			if(this == ModItems.bottle_sparkle) {
				player.heal(10F);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 120 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 120 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 120 * 20, 1));
				ContaminationUtil.contaminate(player, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 5.0F);
			}
			if(this == ModItems.bottle_rad) {
				player.heal(10F);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120 * 20, 1));
				player.addPotionEffect(new PotionEffect(Potion.resistance.id, 120 * 20, 2));
				player.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 120 * 20, 0));
				player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 120 * 20, 4));
				player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 120 * 20, 1));
				ContaminationUtil.contaminate(player, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 15.0F);
			}
			if(this == ModItems.coffee) {
				player.heal(10);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 60 * 20, 2));
			}
			if(this == ModItems.coffee_radium) {
				player.heal(10);
				player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 60 * 20, 2));
				HbmLivingProps.incrementRadiation(player, 500F);
				player.triggerAchievement(MainRegistry.achRadium);
			}

			if(!player.capabilities.isCreativeMode) {

				if(this.cap != null) {
					player.inventory.addItemStackToInventory(new ItemStack(this.cap));
				}
				if(this.container != null) {
					if(stack.stackSize <= 0) {
						return new ItemStack(this.container);
					}
					player.inventory.addItemStackToInventory(new ItemStack(this.container));
				}
			}
			
			player.inventoryContainer.detectAndSendChanges();
		}

		return stack;
	}

	@Override
	public int getMaxItemUseDuration(ItemStack stack) {
		return 32;
	}

	@Override
	public EnumAction getItemUseAction(ItemStack stack) {
		return EnumAction.drink;
	}

	@Spaghetti("cover yourself in oil")
	@Override
	public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
		if(VersatileConfig.hasPotionSickness(player)) return stack;
		if(this.requiresOpener && !player.inventory.hasItem(ModItems.bottle_opener)) return stack;

		player.setItemInUse(stack, this.getMaxItemUseDuration(stack));

		return stack;
	}

	@Override
	@SideOnly(Side.CLIENT)
	public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List list, boolean p_77624_4_) {
		if(this == ModItems.can_smart) {
			list.add("Cheap and full of bubbles");
		}
		if(this == ModItems.can_creature) {
			list.add("Basically gasoline in a tin can");
		}
		if(this == ModItems.can_redbomb) {
			list.add("Liquefied explosives");
		}
		if(this == ModItems.can_mrsugar) {
			list.add("An intellectual drink, for the chosen ones!");
		}
		if(this == ModItems.can_overcharge) {
			list.add("Possible side effects include heart attacks, seizures or zombification");
		}
		if(this == ModItems.can_luna) {
			list.add("Contains actual selenium and star metal. Tastes like night.");
		}
		if(this == ModItems.can_bepis) {
			list.add("beppp");
		}
		if(this == ModItems.can_breen) {
			list.add("Don't drink the water. They put something in it, to make you forget.");
			list.add("I don't even know how I got here.");
		}
		if(this == ModItems.chocolate_milk) {
			list.add("Regular chocolate milk. Safe to drink.");
			list.add("Totally not made from nitroglycerine.");
		}
		if(this == ModItems.bottle_nuka) {
			list.add("Contains about 210 kcal and 1500 mSv.");
		}
		if(this == ModItems.bottle_cherry) {
			list.add("Now with severe radiation poisoning in every seventh bottle!");
		}
		if(this == ModItems.bottle_quantum) {
			list.add("Comes with a colorful mix of over 70 isotopes!");
		}
		if(this == ModItems.bottle2_korl) {
			list.add("Contains actual orange juice!");
		}
		if(this == ModItems.bottle2_fritz) {
			list.add("moremore caffeine");
		}
		if(this == ModItems.bottle_sparkle) {
			if(MainRegistry.polaroidID == 11)
				list.add("Contains trace amounts of taint.");
			else
				list.add("The most delicious beverage in the wasteland!");
		}
		if(this == ModItems.bottle_rad) {
			if(MainRegistry.polaroidID == 11)
				list.add("Now with 400% more radiation!");
			else
				list.add("Tastes like radish and radiation.");
		}
		
		if(this.requiresOpener) list.add("[Requires bottle opener]");
	}
}
