#include "Behaviors/StateMachine.h"

$nodeclass ElipseLineDetector : VisualRoutinesStateNode {
    $nodeclass BuildMap : MapBuilderNode : doStart {
        mapreq.addObjectColor(ellipseDataType,"blue");
        mapreq.addObjectColor(lineDataType, "red");
    }
              
    $nodeclass Reporter : VisualRoutinesStateNode : doStart {
        cout << "There were " << camShS.allShapes().size() << " shapes in the image." << endl;
        int counter = 0;
        NEW_SHAPEVEC(elipse_shapes, EllipseData, select_type<EllipseData>(camShS));
        NEW_SHAPEVEC(line_shape, LineData, select_type<LineData>(camShS));

        if(line_shape.size() != 0){ 
            line_shape.at(0)->setInfinite();
            SHAPEVEC_ITERATE(elipse_shapes, EllipseData, ellipse){
                if(line_shape.at(0)->pointIsLeftOf(ellipse->getCentroid()))
                    counter++;
            } END_ITERATE;
            int right = elipse_shapes.size() - counter;
            cout << "There were " << counter << " ellipses to the Left and " << right <<" to the Right.\n";
        }
        else {
            cout << "There were no Lines.\n";
        }
    }
                          
    $setupmachine{
        builder: BuildMap
        builder =MAP=> Reporter =T(5000)=> builder
    }
}
                                      
REGISTER_BEHAVIOR(ElipseLineDetector);
