// part 2 mapbuilder egg finder

#include "Behaviors/StateMachine.h"
#include "DualCoding/ShapeTypes.h"
#include "DualCoding/VisualRoutinesStateNode.h"

$nodeclass PartTwo : VisualRoutinesStateNode {
  
  // finds ellipses
  $nodeclass Find : MapBuilderNode : doStart {

    mapreq.addObjectColor(ellipseDataType, "red");
    mapreq.addObjectColor(ellipseDataType, "green");
    mapreq.addObjectColor(ellipseDataType, "blue");

    mapreq.addObjectColor(lineDataType, "green");

  }

  // Report Left/Right Ellipses
  $nodeclass Classify : VisualRoutinesStateNode : doStart {
    // get the dividing line
    NEW_SHAPEVEC(lines,LineData,select_type<LineData>(camShS));

    if (lines.size() == 0) {
      cout << "No Lines Found!" << endl;
    } else {
      lines[0]->setInfinite(true);

      int countL = 0;
      int countR = 0;

      NEW_SHAPEVEC(ellipses,EllipseData,select_type<EllipseData>(camShS))
      SHAPEVEC_ITERATE(ellipses,EllipseData,myEllipse)
        if (lines[0]->pointIsLeftOf(myEllipse->getCentroid())) {
          countL += 1;
        } else {
          countR += 1;
        }
      END_ITERATE    

      cout << "Ellipses on Left: " << countL << endl;
      cout << "Ellipses on Right: " << countR << endl;
    }
  }

  // general behavior
  $setupmachine {
    Find =C=> Classify
  }
}

REGISTER_BEHAVIOR(PartTwo);