package pneumaticCraft.client.semiblock;

import net.minecraft.client.Minecraft;
import net.minecraft.util.AxisAlignedBB;

import org.lwjgl.opengl.GL11;

import pneumaticCraft.client.model.semiblocks.ModelHeatFrame;
import pneumaticCraft.common.semiblock.SemiBlockHeatFrame;
import pneumaticCraft.common.tileentity.TileEntityCompressedIronBlock;
import pneumaticCraft.lib.Textures;

public class SemiBlockRendererHeatFrame implements ISemiBlockRenderer<SemiBlockHeatFrame>{
    private final ModelHeatFrame model = new ModelHeatFrame();

    @Override
    public void render(SemiBlockHeatFrame semiBlock, float partialTick){
        GL11.glPushMatrix();
        Minecraft.getMinecraft().renderEngine.bindTexture(Textures.MODEL_HEAT_FRAME);
        int heatLevel = semiBlock.getHeatLevel();
        double[] color = TileEntityCompressedIronBlock.getColorForHeatLevel(heatLevel);
        GL11.glColor4d(color[0], color[1], color[2], 1);

        AxisAlignedBB aabb;
        if(semiBlock.getWorld() != null) {
            semiBlock.getBlock().setBlockBoundsBasedOnState(semiBlock.getWorld(), semiBlock.getPos().chunkPosX, semiBlock.getPos().chunkPosY, semiBlock.getPos().chunkPosZ);
            aabb = semiBlock.getBlock().getSelectedBoundingBoxFromPool(semiBlock.getWorld(), semiBlock.getPos().chunkPosX, semiBlock.getPos().chunkPosY, semiBlock.getPos().chunkPosZ);
            aabb.minX -= semiBlock.getX();
            aabb.maxX -= semiBlock.getX();
            aabb.minY -= semiBlock.getY();
            aabb.maxY -= semiBlock.getY();
            aabb.minZ -= semiBlock.getZ();
            aabb.maxZ -= semiBlock.getZ();
        } else {
            aabb = AxisAlignedBB.getBoundingBox(1 / 16D, 1 / 16D, 1 / 16D, 15 / 16D, 15 / 16D, 15 / 16D);
        }
        GL11.glTranslated(aabb.minX, aabb.minY, aabb.minZ);
        GL11.glScaled(aabb.maxX - aabb.minX, aabb.maxY - aabb.minY, aabb.maxZ - aabb.minZ);
        GL11.glTranslated(0.5, -0.5, 0.5);
        model.render(null, 0, 0, 0, 0, 0, 1 / 16F);
        GL11.glPopMatrix();
        GL11.glColor4d(1, 1, 1, 1);
    }

}