#include "Behaviors/StateMachine.h"

$nodeclass FindVeeShape : VisualRoutinesStateNode
{

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

    mapreq.pursueShapes = false;
}

$nodeclass MakeSketch : VisualRoutinesStateNode : doStart
{
    camSkS.clear();
    NEW_SKETCH(camFrame, uchar, sketchFromSeg());

    Shape<LineData> big_line;
    Shape<LineData> short_line;
    int max = 0;
    int second_max = 0;
    NEW_SHAPEVEC(line_shapes, LineData, select_type<LineData>(camShS));
    SHAPEVEC_ITERATE(line_shapes, LineData, line)
    if(line->getLength() > max)
    {
        short_line = big_line;
        big_line = line;
        second_max = max;
        max = line->getLength();
    }
    else if(line->getLength() > second_max)
    {
        short_line = line;
        second_max = line->getLength();
    }
    END_ITERATE;

    NEW_SKETCH(b_cc1, bool, visops::topHalfPlane(big_line));
    NEW_SKETCH(b_cc2, bool, visops::topHalfPlane(short_line));
    NEW_SKETCH(result, bool, b_cc1 & b_cc2);

    NEW_SKETCH(red_stuff, bool, visops::colormask(camFrame, "red"));
    NEW_SKETCH(green_stuff, bool, visops::colormask(camFrame, "green"));

    NEW_SKETCH(red_blobs, uint, visops::labelcc(red_stuff));
    NEW_SKETCH(green_blobs, uint, visops::labelcc(green_stuff));

    NEW_SKETCH(new_sketch, bool, red_stuff & green_stuff);
//  NEW_SKETCH(new_sketch, uint, empty_stuff);

//  Sketch<uint> new_sketch = Sketch(camSkS, "new_sketch");

    NEW_SKETCH(red_area_sketch, uint, visops::areacc(red_blobs));
    for(int count = 0; count < 5; count++)
    {
        int const max_red_area = red_area_sketch->max();
        NEW_SKETCH(red_max, bool, red_area_sketch == max_red_area);
        NEW_SKETCH(intersection, bool, red_max & result);
        int total = 0;
        for(unsigned int inCount = 0; inCount < intersection.pixels->size(); inCount++)
            if(intersection[inCount])
                total++;
        if(total > 10)
        {
            cout << "red blob in vee" << endl;
            new_sketch += intersection;
        }
        else
            cout << "red blob outside vee" << endl;

        NEW_SKETCH(blah, uint, visops::labelcc(red_max));
        NEW_SKETCH(blah_area, uint, visops::areacc(blah));
        red_area_sketch -= blah_area;
    }

    cout << "done with makeSketch" << endl;
}

$setupmachine {
    FindStuff =C=> MakeSketch
}

}

REGISTER_BEHAVIOR(FindVeeShape);
