#include "Behaviors/StateMachine.h"

$nodeclass EllipseCounter : VisualRoutinesStateNode {

	$nodeclass FindEllipses : MapBuilderNode : doStart {
		mapreq.addObjectColor(ellipseDataType, "red");
		mapreq.addObjectColor(ellipseDataType, "green");
		mapreq.addObjectColor(ellipseDataType, "blue");
		mapreq.addObjectColor(lineDataType, "red");
	}

	$nodeclass CountEllipses : VisualRoutinesStateNode : doStart {


		NEW_SHAPEVEC(ellipse_shapes, EllipseData, select_type<EllipseData>(camShS));
		SHAPEVEC_ITERATE(ellipse_shapes, EllipseData, ell) {
			if (ell->getArea() < 250) {
				camShS.deleteShape(ell);
			}
		}
		END_ITERATE

		if (ellipse_shapes.size() > 0) {
			NEW_SKETCH(ellipse0, bool, ellipse_shapes[0]->getRendering());
		}
	
		NEW_SHAPEVEC(lines, LineData, select_type<LineData>(camShS));
		if (lines.size() > 0) {
			IsLeftOfThis mytest(lines[0]);
			lines[0]->setInfinite();

			int left_ellipses = 0;
			int right_ellipses = 0;

			SHAPEVEC_ITERATE(ellipse_shapes, EllipseData, ell)
				if (ell->getArea() > 250) {
					if (mytest(ell))
						++left_ellipses;
					else
						++right_ellipses;
				}
			END_ITERATE;

			cout << "Ellipses left of line: " << left_ellipses << endl
				 << "Ellipses right of line: " << right_ellipses << endl;
		}
		else {
			cout << "No lines in picture." << endl;
		}
		
	}

	$setupmachine {
		FindEllipses =C=> CountEllipses =N=> SpeechNode("done")
	}
}
REGISTER_BEHAVIOR(EllipseCounter);
