/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Graph.java
 *
 * Created on Nov 17, 2009, 11:56:50 PM
 */

package seniordesign;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;

/**
 *
 * @author Matt
 */
public class Graph extends Canvas {
    public static final int NODATA  = -1;
    public static final int ALT     = 0;
    public static final int XACCEL  = 1;
    public static final int YACCEL  = 2;
    public static final int ZACCEL  = 3;
    public static final int YRATE   = 4;
    public static final int XRATE   = 5;

    private int myType = -1;
    private DataManager myDataManager;
    private int endTime = 1;
    private float maxValue = 1;
    private float minValue = -1;

    public Graph() {
        setBackground(Color.WHITE);
    }

    /** Creates new form Graph */
    public void setData(DataManager dataMan,int type) {
        this.myDataManager = dataMan;
        this.myType = type;
        endTime = myDataManager.getEndTime();

        switch(type) {
            case ALT:
               maxValue = myDataManager.getMaxAlt();
               minValue = 0;
            break;

            case XACCEL:
               maxValue = myDataManager.getMaxXAccel();
               minValue = myDataManager.getMinXAccel();
            break;

            case YACCEL:
               maxValue = myDataManager.getMaxYAccel();
               minValue = myDataManager.getMinYAccel();
            break;

            case ZACCEL:
               maxValue = myDataManager.getMaxZAccel();
               minValue = myDataManager.getMinZAccel();
            break;

            case XRATE:
               maxValue = myDataManager.getMaxXRate();
               minValue = myDataManager.getMinXRate();
            break;

            case YRATE:
               maxValue = myDataManager.getMaxYRate();
               minValue = myDataManager.getMinYRate();
            break;
        }
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        int width = this.getWidth();
        int height = this.getHeight();

        g.setColor(Color.WHITE);
        g.drawRect(0,0, width, height);

        g.setColor(Color.BLACK);
        g.drawLine(20,0,20,height - 20);
        g.drawLine(20,height - 20,width,height - 20);
/*
 * Draw the border
 **/
        for(int x = 0;x < 10;x++) {
            g.drawLine(20 + ((width-20)/10)*(x+1),height - 15,20 + ((width-20)/10)*(x+1),height - 25);
            if(x != 9)
                g.drawLine(15,(int)(((height - 20)/(float)9)*x),25,(int)(((height - 20)/(float)9)*x));
        }

/*
 * Draw the data
 */
        if(myType != Graph.NODATA) {
            for(int x = 20;x < width-1;x++) {
                float yValue = 0;
                float yValue2 = 0;
                int t = (int)(((x-20)/(float)(width-20)) * myDataManager.getEndTime());
                int t2 = (int)(((x-19)/(float)(width-20)) * myDataManager.getEndTime());
                
                switch(myType) {
                    case Graph.ALT:
                        yValue = myDataManager.getAlt(t);
                        yValue2 = myDataManager.getAlt(t2);
                    break;

                    case Graph.XACCEL:
                        yValue = myDataManager.getXAccel(t);
                        yValue2 = myDataManager.getXAccel(t2);
                    break;

                    case Graph.YACCEL:
                        yValue = myDataManager.getYAccel(t);
                        yValue2 = myDataManager.getYAccel(t2);
                    break;

                    case Graph.ZACCEL:
                        yValue = myDataManager.getZAccel(t);
                        yValue2 = myDataManager.getZAccel(t2);
                    break;

                    case Graph.XRATE:
                        yValue = myDataManager.getXRate(t);
                        yValue2 = myDataManager.getXRate(t2);
                    break;

                    case Graph.YRATE:
                        yValue = myDataManager.getYRate(t);
                        yValue2 = myDataManager.getYRate(t2);
                    break;
                }
                
                int py = height-20 - (int) (((yValue - minValue)/(maxValue-minValue)) * (height-20));
                int py2 = height-20 - (int) (((yValue2 - minValue)/(maxValue-minValue)) * (height-20));
                g.drawLine(x, py, x+1, py2);
            }
        }else{
            System.out.println("No Data");
        }
    }

    public void paintTime(int t,Graphics g) {
        
    }
}

    