package drzhark.mocreatures.client.renderer.entity;

import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderBiped;
import net.minecraft.entity.EntityLiving;

import org.lwjgl.opengl.GL11;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import drzhark.mocreatures.MoCreatures;
import drzhark.mocreatures.client.MoCClientProxy;
import drzhark.mocreatures.client.model.MoCModelKitty;
import drzhark.mocreatures.entity.passive.MoCEntityKitty;

@SideOnly(Side.CLIENT)
public class MoCRenderKitty extends RenderBiped {

    public MoCModelKitty pussy1;

    public MoCRenderKitty(MoCModelKitty modelkitty, float f)
    {
        super(modelkitty, f);
        pussy1 = modelkitty;
    }

    @Override
    public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2, float f, float f1)
    {
        MoCEntityKitty entitykitty = (MoCEntityKitty) entityliving;
        super.doRenderLiving(entitykitty, d, d1, d2, f, f1);
        boolean flag = MoCreatures.proxy.getDisplayPetName() && !(entitykitty.getName()).isEmpty();
        boolean flag1 = MoCreatures.proxy.getDisplayPetHealth();
        boolean flag2 = MoCreatures.proxy.getDisplayPetIcons();
        if (entitykitty.renderName())
        {
            float f2 = 1.6F;
            float f3 = 0.01666667F * f2;
            float f4 = entityliving.getDistanceToEntity(renderManager.livingPlayer);
            String s = "";
            s = (new StringBuilder()).append(s).append(entitykitty.getName()).toString();
            if (f4 < 12F)
            {
                float f5 = 0.2F;
                if (pussy1.isSitting)
                {
                    f5 = 0.4F;
                }
                FontRenderer fontrenderer = getFontRendererFromRenderManager();
                GL11.glPushMatrix();
                GL11.glTranslatef((float) d + 0.0F, (float) d1 - f5, (float) d2);
                GL11.glNormal3f(0.0F, 1.0F, 0.0F);
                GL11.glRotatef(-renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
                GL11.glScalef(-f3, -f3, f3);
                GL11.glDisable(2896 /* GL_LIGHTING */);
                Tessellator tessellator = Tessellator.instance;
                byte byte0 = -48;
                if (flag2 && ((MoCEntityKitty) entityliving).getIsEmo())
                {
                    //if(MoCClientProxy.mc.isMultiplayerWorld() && (((MoCEntityKitty) entityliving).getEmoticon() != null))
                    if ((((MoCEntityKitty) entityliving).getEmoticon() != null))
                    {
                        GL11.glBindTexture(3553 /* GL_TEXTURE_2D */, MoCClientProxy.mc.renderEngine.getTexture(((MoCEntityKitty) entityliving).getEmoticon()));
                    }
                    else
                    {
                        GL11.glBindTexture(3553 /* GL_TEXTURE_2D */, MoCClientProxy.mc.renderEngine.getTexture(((MoCEntityKitty) entityliving).getEmoticon()));
                    }
                    int i = -83;
                    if (!flag)
                    {
                        i += 8;
                    }
                    if (!flag1)
                    {
                        i += 8;
                    }
                    int k = 32;
                    int l = (k / 2) * -1;
                    float f9 = 0.0F;
                    float f11 = 1.0F / k;
                    float f12 = 1.0F / k;
                    tessellator.startDrawingQuads();
                    tessellator.addVertexWithUV(l, i + k, f9, 0.0D, k * f12);
                    tessellator.addVertexWithUV(l + k, i + k, f9, k * f11, k * f12);
                    tessellator.addVertexWithUV(l + k, i, f9, k * f11, 0.0D);
                    tessellator.addVertexWithUV(l, i, f9, 0.0D, 0.0D);
                    tessellator.draw();
                }
                if (flag1)
                {
                    if (!flag)
                    {
                        byte0 += 8;
                    }
                    GL11.glDisable(3553 /* GL_TEXTURE_2D */);
                    tessellator.startDrawingQuads();
                    float f6 = entitykitty.getHealth();
                    float f7 = entitykitty.getMaxHealth();
                    float f8 = f6 / f7;
                    float f10 = 30F * f8;
                    tessellator.setColorRGBA_F(0.7F, 0.0F, 0.0F, 1.0F);
                    tessellator.addVertex(-15F + f10, -8 + byte0, 0.0D);
                    tessellator.addVertex(-15F + f10, -4 + byte0, 0.0D);
                    tessellator.addVertex(15D, -4 + byte0, 0.0D);
                    tessellator.addVertex(15D, -8 + byte0, 0.0D);
                    tessellator.setColorRGBA_F(0.0F, 0.7F, 0.0F, 1.0F);
                    tessellator.addVertex(-15D, -8 + byte0, 0.0D);
                    tessellator.addVertex(-15D, -4 + byte0, 0.0D);
                    tessellator.addVertex(f10 - 15F, -4 + byte0, 0.0D);
                    tessellator.addVertex(f10 - 15F, -8 + byte0, 0.0D);
                    tessellator.draw();
                    GL11.glEnable(3553 /* GL_TEXTURE_2D */);
                }
                if (flag)
                {
                    GL11.glDepthMask(false);
                    GL11.glDisable(2929 /* GL_DEPTH_TEST */);
                    GL11.glEnable(3042 /* GL_BLEND */);
                    GL11.glBlendFunc(770, 771);
                    GL11.glDisable(3553 /* GL_TEXTURE_2D */);
                    tessellator.startDrawingQuads();
                    int j = fontrenderer.getStringWidth(s) / 2;
                    tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F);
                    tessellator.addVertex(-j - 1, -1 + byte0, 0.0D);
                    tessellator.addVertex(-j - 1, 8 + byte0, 0.0D);
                    tessellator.addVertex(j + 1, 8 + byte0, 0.0D);
                    tessellator.addVertex(j + 1, -1 + byte0, 0.0D);
                    tessellator.draw();
                    GL11.glEnable(3553 /* GL_TEXTURE_2D */);
                    fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, byte0, 0x20ffffff);
                    GL11.glEnable(2929 /* GL_DEPTH_TEST */);
                    GL11.glDepthMask(true);
                    fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, byte0, -1);
                    GL11.glDisable(3042 /* GL_BLEND */);
                    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                }
                GL11.glEnable(2896 /* GL_LIGHTING */);
                GL11.glPopMatrix();
            }
        }
    }

    public void doRenderLiving2(EntityLiving entityliving, double d, double d1, double d2, float f, float f1)
    {
        MoCEntityKitty entitykitty = (MoCEntityKitty) entityliving;
        super.doRenderLiving(entitykitty, d, d1, d2, f, f1);
    }

    @Override
    protected float handleRotationFloat(EntityLiving entityliving, float f)
    {
        MoCEntityKitty entitykitty = (MoCEntityKitty) entityliving;
        if (!entitykitty.getIsAdult())
        {
            stretch(entitykitty);
        }
        return entityliving.ticksExisted + f;
    }

    protected void onMaBack(EntityLiving entityliving)
    {
        GL11.glRotatef(90F, 0.0F, 0.0F, -1F);

        if (!entityliving.worldObj.isRemote && (entityliving.ridingEntity != null))
        {
            GL11.glTranslatef(-1.5F, 0.2F, -0.2F);
        }
        else
        {
            GL11.glTranslatef(0.1F, 0.2F, -0.2F);
        }

    }

    protected void onTheSide(EntityLiving entityliving)
    {
        GL11.glRotatef(90F, 0.0F, 0.0F, -1F);
        GL11.glTranslatef(0.2F, 0.0F, -0.2F);
    }

    @Override
    protected void preRenderCallback(EntityLiving entityliving, float f)
    {
        MoCEntityKitty entitykitty = (MoCEntityKitty) entityliving;
        pussy1.isSitting = entitykitty.getIsSitting();
        pussy1.isSwinging = entitykitty.getIsSwinging();
        pussy1.swingProgress = entitykitty.swingProgress;
        pussy1.kittystate = entitykitty.getKittyState();
        if (entitykitty.getKittyState() == 20)
        {
            onTheSide(entityliving);
        }
        if (entitykitty.climbingTree())
        {
            rotateAnimal(entityliving);
        }
        if (entitykitty.upsideDown())
        {
            upsideDown(entityliving);
        }
        if (entitykitty.onMaBack())
        {
            onMaBack(entityliving);
        }
    }

    protected void rotateAnimal(EntityLiving entityliving)
    {
        if (!entityliving.onGround)
        {
            GL11.glRotatef(90F, -1F, 0.0F, 0.0F);
        }
    }

    protected void stretch(MoCEntityKitty entitykitty)
    {
        GL11.glScalef(entitykitty.getEdad() * 0.01F, entitykitty.getEdad() * 0.01F, entitykitty.getEdad() * 0.01F);
    }

    protected void upsideDown(EntityLiving entityliving)
    {
        GL11.glRotatef(180F, 0.0F, 0.0F, -1F);
        GL11.glTranslatef(-0.35F, 0F, -0.55F);
    }
}