package edu.calpoly.csc480.Corral.Agent;

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

import edu.calpoly.csc480.Corral.Agent.Util.*;

public class MeansView extends BaseMeansView
{
	public MeansView() {
		faceOrigin = new Point();
		facePoint = new Point();
	}
	
	public void setDocument(BaseMeans means) {
		super.setDocument(means);
		makeFaces();
	}
	
	public void directionSet() {
//		face = faces[drift];
	}
	
	public void locationSet() {
//		facePoint.x = point.x + faceOrigin.x;
//		facePoint.y = point.y + faceOrigin.y;
	}

/*	public void paint(Graphics draw) {
		super.paint(draw);
		paintFace((Graphics2D)draw);
	}
*/
	protected Shape face;
	protected Shape faces[];
	protected Paint facePaint;
	protected Point faceOrigin, facePoint;
	
	protected void makeFaces() {
		final int npoints = 3;
		final double xfactor = 1.5, yfactor = 1.75;
		
		double iconSize;
		int drift = 0;
		int minX, midX, maxX;
		int minY, midY, maxY;
		int xpoints[], ypoints[];
		int rotate, rotateIncrement;
		Point2D.Double origin;
		Shape faceMold;
		
		xpoints = new int[npoints];
		ypoints = new int[npoints];
		
		iconSize = (double)Math.min(icon.getIconWidth(), icon.getIconHeight());

		minX = minY = 0;
		maxX = (int)(iconSize / xfactor);
		maxY = (int)(iconSize / yfactor);
		midX = (minX + maxX) / 2;
		midY = (minY + maxY) / 2;
		
		xpoints[drift]   = minX;		ypoints[drift++] = maxY;
		xpoints[drift]   = midX;		ypoints[drift++] = minY;
		xpoints[drift]   = maxX;		ypoints[drift++] = maxY;

		faceMold = new Polygon(xpoints, ypoints, npoints);
		facePaint = Color.red;
		faces = new Shape[Direction.numDirections];

		faceOrigin.x = size.width /2 - (maxX - minX)/2;
		faceOrigin.y = size.height/2 - (maxY - minY)/2;

		for (drift = 0; drift < Direction.numDirections; drift++) {
			faces[drift] = AffineTransform.
			 getRotateInstance(
			  new Direction(drift).getAngle()).//, faceOrigin.x, faceOrigin.y).
			 createTransformedShape(faceMold);
		}
	}

	protected void paintFace(Graphics2D draw) {
		Paint oldPaint = draw.getPaint();

		draw.setPaint(facePaint);
		draw.translate(facePoint.x, facePoint.y);
		draw.fill(face);
		draw.translate(-facePoint.x, -facePoint.y);
		draw.setPaint(oldPaint);
	}
}