#include "Behaviors/StateMachine.h"
using std::vector;
$nodeclass Polygons : VisualRoutinesStateNode{
	$nodeclass FindEllipses : MapBuilderNode : doStart{
		mapreq.addObjectColor(ellipseDataType, "green");
		mapreq.addObjectColor(ellipseDataType, "red");
	}
	$nodeclass Polygon : VisualRoutinesStateNode : doStart{
		NEW_SHAPEVEC(ellipses, EllipseData, select_type<EllipseData>(camShS));
	NEW_SHAPEVEC(green_ellipses, EllipseData, subset(ellipses, IsColor("green")));
	NEW_SHAPEVEC(red_ellipses, EllipseData, subset(ellipses, IsColor("red")));

		if(green_ellipses.size() < 3|| red_ellipses.size() <=0)
		{
			cout << "Only " << green_ellipses.size() << " found" << endl;
			cout << "Only " << red_ellipses.size() << " found" << endl;
		}
		else
		{
		//draw a polygon by joining the centroids of the first three ellipses
			//construct a vector of points
			// call it points
			vector<DualCoding::Point> points;
			points.push_back(green_ellipses[0]->getCentroid());
			points.push_back(green_ellipses[1]->getCentroid());
			points.push_back(green_ellipses[2]->getCentroid());
			//Create a new polygon
			NEW_SHAPE(poly1, PolygonData, new PolygonData(camShS, points, true));
			NEW_SHAPE(red_ellipse, EllipseData, subset(ellipses, IsColor("red"))[0]);
			//is the red ellipse in or out of the polygon?
			bool inside = poly1->isInside(red_ellipse->getCentroid());
                        if(inside==1)
				cout << "Is inside: true" << endl;
			else
				cout << "Is inside: false" << endl;
				
		}
	}
	
	$setupmachine{
		FindEllipses=C=>Polygon
	}
}
REGISTER_BEHAVIOR(Polygons);
