package StevenDimDoors.mod_pocketDim.items;

import java.util.List;

import StevenDimDoors.mod_pocketDim.LinkData;
import StevenDimDoors.mod_pocketDim.dimHelper;
import StevenDimDoors.mod_pocketDim.mod_pocketDim;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ItemStabilizedRiftSignature extends itemLinkSignature
{
    private Material doorMaterial;

    public ItemStabilizedRiftSignature(int par)
    {
    	 super(par);
    	 this.setMaxStackSize(1);
    	// this.setTextureFile("/PocketBlockTextures.png");
         this.setCreativeTab(CreativeTabs.tabTransport);

      //   this.iconIndex=5;
         this.setMaxDamage(0);
         this.hasSubtypes=true;
    	 //TODO move to proxy
    }
    
    @SideOnly(Side.CLIENT)
    @Override
    public boolean hasEffect(ItemStack par1ItemStack)
    {
    	// adds effect if item has a link stored
    	
    	
    	if(par1ItemStack.hasTagCompound())
    	{
    		if(par1ItemStack.stackTagCompound.getBoolean("isCreated"))
    		{
    		return true;
    		}
    	}
       return false;
    }
    
    
    public void registerIcons(IconRegister par1IconRegister)
    {
        this.iconIndex = par1IconRegister.registerIcon(mod_pocketDim.modid + ":" + this.getUnlocalizedName());

    }

    @Override
    public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
    	int key;
    	LinkData linkData;
		int thisWorldID=par3World.provider.dimensionId;
		
		

    	
    			
    		
			//par1ItemStack= par2EntityPlayer.getCurrentEquippedItem();
			Integer[] linkCoords =this.readFromNBT(par1ItemStack);
    		
    		
    	
    		//System.out.println(key);
    		int offset = 2;
    		if(par1ItemStack.getTagCompound()!=null)
    		{
    		if(par1ItemStack.getTagCompound().getBoolean("isCreated"))
    		{
    			boolean hasEnder = false;
    		// checks to see if the item has a link stored, if so, it creates it
    		
    			if(par2EntityPlayer.inventory.hasItem(Item.enderPearl.itemID))
    			{
    				par2EntityPlayer.inventory.consumeInventoryItem(Item.enderPearl.itemID);
    				hasEnder=true;
    			}
    			
    			
    			if(par3World.getBlockId(par4, par5, par6)==Block.snow.blockID)
    			{
    				offset = 1;
    			}
    			if(hasEnder&&!par3World.isRemote)
    			{
    				if(dimHelper.instance.getLinkDataFromCoords(linkCoords[0], linkCoords[1], linkCoords[2], par3World)==null)
    				{
        				dimHelper.instance.createLink(linkCoords[3], par3World.provider.dimensionId, linkCoords[0], linkCoords[1], linkCoords[2],par4, par5+offset, par6);	

    				}
    				dimHelper.instance.createLink(par3World.provider.dimensionId, linkCoords[3], par4, par5+offset, par6, linkCoords[0], linkCoords[1], linkCoords[2]);		
    				par2EntityPlayer.sendChatToPlayer("Rift Created");
    			}
    			else if(!par3World.isRemote)
    			{
    				par2EntityPlayer.sendChatToPlayer("No Ender Pearls!");
    			}

    			
	    		
    			
    		
    			}
    		}
    		else if(!par3World.isRemote)
        	{
    			if(par3World.getBlockId(par4, par5, par6)==Block.snow.blockID)
    			{
    				offset = 1;
    			}
    			//otherwise, it creates the first half of the link. Next click will complete it. 
    			key= dimHelper.instance.createUniqueInterDimLinkKey();
        		this.writeToNBT(par1ItemStack, par4, par5+offset, par6,par3World.provider.dimensionId);
        		

        		
    			par2EntityPlayer.sendChatToPlayer("Rift Signature Stored");


        	}
    		
    		//dimHelper.instance.save();
    	
    	
    	
    	return true;
		
    
    }
    
    @SideOnly(Side.CLIENT)

    /**
     * allows items to add custom lines of information to the mouseover description
     */
    public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
    {
    	
    	if(par1ItemStack.hasTagCompound())
    	{
    		if(par1ItemStack.stackTagCompound.getBoolean("isCreated"))
    		{
    			Integer[] coords = this.readFromNBT(par1ItemStack);
    			par3List.add(String.valueOf("Leads to dim "+coords[3] +" with depth "+dimHelper.instance.getDimDepth(dimHelper.instance.getDimDepth(coords[3]))));
        		par3List.add("at x="+coords[0]+" y="+coords[1]+" z="+coords[2]);

    		}
    
    	}
    	else
    	{
    		par3List.add("First click stores location,");
    		par3List.add ("second click creates two rifts,");
    		par3List.add("that link the first location");
    		par3List.add("with the second location");


    	}
    }
    
    public void writeToNBT(ItemStack itemStack,int x, int y, int z, int dimID)
    {
    	  NBTTagCompound tag;

       if(itemStack.hasTagCompound())
       {
    	   tag = itemStack.getTagCompound();
    	   
       }
       else
       {
    	   tag= new NBTTagCompound();
       }
       
       tag.setInteger("linkX", x);
       tag.setInteger("linkY", y);
       tag.setInteger("linkZ", z);
       tag.setInteger("linkDimID", dimID);
       tag.setBoolean("isCreated", true);

       itemStack.setTagCompound(tag);

    }

    /**
     * Read the stack fields from a NBT object.
     */
    public Integer[] readFromNBT(ItemStack itemStack)
    {
    	
    	NBTTagCompound tag;
    	Integer[] linkCoords = new Integer[5];
    	if(itemStack.hasTagCompound())
    	{
    		tag = itemStack.getTagCompound();

    		if(!tag.getBoolean("isCreated"))
    		{
    			return null;
    		}
    		linkCoords[0]=tag.getInteger("linkX");
    		linkCoords[1]=tag.getInteger("linkY");
    		linkCoords[2]=tag.getInteger("linkZ");
    		linkCoords[3]=tag.getInteger("linkDimID");
  
       	   
        }
    	return linkCoords;
          
    }
    
    
    @Override
    public void onCreated(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) 
    {
    	if(!par2World.isRemote)
    	{
    		/**
    		//creates the first half of the link on item creation
    		int key= dimHelper.instance.createUniqueInterDimLinkKey();
    		LinkData linkData= new LinkData(par2World.provider.dimensionId,MathHelper.floor_double(par3EntityPlayer.posX),MathHelper.floor_double(par3EntityPlayer.posY),MathHelper.floor_double(par3EntityPlayer.posZ));
    		System.out.println(key);

    		dimHelper.instance.interDimLinkList.put(key, linkData);
    		par1ItemStack.setItemDamage(key);
    		**/
    	}
    }
}