package codechicken.enderstorage.storage.item;

import codechicken.lib.vec.Quat;
import codechicken.lib.vec.Vector3;

public class EnderDyeButton
{    
    public EnderDyeButton(int index)
    {
        button = index;
        
        verts = new Vector3[8];
        verts[0] = new Vector3(0, -0.25, -0.0625);
        verts[1] = new Vector3(0.125, -0.25, -0.0625);
        verts[2] = new Vector3(0.125, -0.25, 0);
        verts[3] = new Vector3(0, -0.25, 0);
        verts[4] = new Vector3(0, 0, -0.0625);
        verts[5] = new Vector3(0.125, 0, -0.0625);
        verts[6] = new Vector3(0.125, 0, 0);
        verts[7] = new Vector3(0, 0, 0);
        
        for(int i = 0; i < 8; i++)
        {
            verts[i].add(0.25 + 0.1875*index, -0.375, 0.9375);
        }

        Quat quat2 = Quat.aroundAxis(1, 0, 0, -0.5 * 3.14159);
        for(int i = 0; i < 8; i++)
        {
            quat2.rotate(verts[i]);
        }
    }
    
    private EnderDyeButton()
    {}
    
    public void rotateMeta(int angle)
    {
        rotate(0.5, 0, 0.5, 0, 1, 0, angle * -0.5 * 3.14159);
    }
    
    /**
     * 
     * @param ax
     * @param ay
     * @param az
     * @param angle in radians
     */
    public void rotate(double px, double py, double pz, double ax, double ay, double az, double angle)
    {
        Quat quat = Quat.aroundAxis(ax, ay, az, angle);
        for(int i = 0; i < 8; i++)
        {
            verts[i].add(-px, -py, -pz);
            quat.rotate(verts[i]);
            verts[i].add(px, py, pz);
        }
    }
    
    public EnderDyeButton copy()
    {
        EnderDyeButton newbutton = new EnderDyeButton();
        newbutton.button = button;
        newbutton.verts = new Vector3[8];

        for(int i = 0; i < 8; i++)
        {
            newbutton.verts[i] = verts[i].copy();        
        }
        
        return newbutton;
    }
    
    public void flipCoords(int ax, int ay, int az)
    {
        for(int i = 0; i < 8; i++)
        {
            verts[i].add(ax, ay, az);
        }
    }
    
    public int button;
    public Vector3[] verts;
    
    public Vector3 getMin()
    {
        int minindex = 0;
        double mindist = 100;
        for(int i = 0; i < 8; i++)
        {
            double dist = verts[i].x + verts[i].y + verts[i].z;
            if(dist < mindist)
            {
                mindist = dist;
                minindex = i;
            }
        }
        
        return verts[minindex];
    }
    
    public Vector3 getMax()
    {
        int maxindex = 0;
        double maxdist = 0;
        for(int i = 0; i < 8; i++)
        {
            double dist = verts[i].x + verts[i].y + verts[i].z;
            if(dist > maxdist)
            {
                maxdist = dist;
                maxindex = i;
            }
        }
        
        return verts[maxindex];
    }
}