package edu.calpoly.csc480.Corral.Agent.Util;

import java.awt.*;
import java.awt.geom.*;

import edu.calpoly.csc480.Corral.Agent.*;
import edu.calpoly.csc480.Corral.Area.Area;
import edu.calpoly.csc480.Corral.Seer.*;
import edu.calpoly.csc480.Corral.Tile.*;

public class HintCallback extends BaseCallback {
	public HintCallback(BaseSeer seer) {
		super(seer);
		means = seer.getArea().getMeans();
		rules = seer.getRules();
		goal  = ((Area)seer.getArea()).getGoalTile().getLocation();
	}

	public short requestDistanceHint(Node node) {
		Point agent = means.getLocation();
		node.pathCost += rules.distanceHintCost;
		return (short)Point2D.distance(
		 (double)goal.x, (double)goal.y, (double)agent.x, (double)agent.y);
	}

	public Direction requestDirectionHint(Node node) {
		int x, y;
		Point agent = means.getLocation();

		node.pathCost += rules.directionHintCost;
		x = (goal.x < agent.x ? -1 : (goal.x == agent.x ? 0 : 1));
		y = (goal.y < agent.y ? -1 : (goal.y == agent.y ? 0 : 1));
		return new Direction(new Point(x, y));
	}

	protected BaseMeans means;
	protected BaseRules rules;
	protected Point goal;
}