package gtPlusPlus.core.fluids;

import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.material.Material;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.math.MathUtils;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fluids.BlockFluidClassic;
import net.minecraftforge.fluids.Fluid;

public class BlockFluidBase extends BlockFluidClassic {

	@SideOnly(Side.CLIENT)
	protected IIcon stillIcon;
	@SideOnly(Side.CLIENT)
	protected IIcon flowingIcon;

	protected int colour;
	protected Material fluidMaterial;
	final String displayName;

	@SuppressWarnings("deprecation")
	public BlockFluidBase(final Fluid fluid, final Material material) {
		super(fluid, net.minecraft.block.material.Material.lava);
		final short[] tempColour = material.getRGBA();
		this.colour = Utils.rgbtoHexValue(tempColour[0], tempColour[1], tempColour[2]);
		this.fluidMaterial = material;
		this.setCreativeTab(AddToCreativeTab.tabOther);
		this.displayName = material.getLocalizedName();
		LanguageRegistry.addName(this, "Molten "+this.displayName+" ["+MathUtils.celsiusToKelvin(this.fluidMaterial.getBoilingPointC())+"K]");
		this.setBlockName(this.GetProperName());
	}

	@SuppressWarnings("deprecation")
	public BlockFluidBase(final String fluidName, final Fluid fluid, final short[] colour) {
		super(fluid, net.minecraft.block.material.Material.lava);
		final short[] tempColour = colour;
		this.colour = Utils.rgbtoHexValue(tempColour[0], tempColour[1], tempColour[2]);
		this.setCreativeTab(AddToCreativeTab.tabOther);
		this.displayName = fluidName;
		LanguageRegistry.addName(this, "Molten "+this.displayName);
		this.setBlockName(this.GetProperName());
	}

	@Override
	public IIcon getIcon(final int side, final int meta) {
		return ((side == 0) || (side == 1))? this.stillIcon : this.flowingIcon;
	}

	@SideOnly(Side.CLIENT)
	@Override
	public void registerBlockIcons(final IIconRegister register) {
		this.stillIcon = register.registerIcon(CORE.MODID+":fluids/fluid.molten.autogenerated");
		this.flowingIcon = register.registerIcon(CORE.MODID+":fluids/fluid.molten.autogenerated");
	}

	@Override
	public boolean canDisplace(final IBlockAccess world, final int x, final int y, final int z) {
		if (world.getBlock(x,  y,  z).getMaterial().isLiquid()) {
			return false;
		}
		return super.canDisplace(world, x, y, z);
	}

	@Override
	public boolean displaceIfPossible(final World world, final int x, final int y, final int z) {
		if (world.getBlock(x,  y,  z).getMaterial().isLiquid()) {
			return false;
		}
		return super.displaceIfPossible(world, x, y, z);
	}

	@Override
	public int colorMultiplier(final IBlockAccess par1IBlockAccess, final int par2, final int par3, final int par4){

		if (this.colour == 0){
			return MathUtils.generateSingularRandomHexValue();
		}

		return this.colour;
	}

	@Override
	public int getRenderColor(final int aMeta) {
		if (this.colour == 0){
			return MathUtils.generateSingularRandomHexValue();
		}

		return this.colour;
	}

	public String GetProperName() {
		String tempIngot;

		tempIngot = "Molten "+this.displayName;

		return tempIngot;
	}

	public Material getFluidMaterial(){
		return this.fluidMaterial;
	}

}