#include "Crew/MapBuilder.h"
#include "Crew/MapBuilderRequest.h"
#include "DualCoding/VisualRoutinesStateNode.h"
#include "DualCoding/ShapeTypes.h"
#include "Behaviors/StateMachine.h"

$nodeclass ExtractEllipse : VisualRoutinesStateNode {

  // Looks at scene and extracts ellipses
  $nodeclass Eye : MapBuilderNode : doStart {
    mapreq.addObjectColor(ellipseDataType, "green");
    mapreq.addObjectColor(ellipseDataType, "red");
    mapreq.addObjectColor(ellipseDataType, "blue");
  }

  // Examines the scene and reports number of ellipses
  $nodeclass Report : VisualRoutinesStateNode : doStart {
    NEW_SHAPEVEC(ellipses, EllipseData, select_type<EllipseData>(camShS));
    SHAPEVEC_ITERATE(ellipses, EllipseData, myellipse)
      NEW_SHAPE(redrawn, EllipseData, 
        new EllipseData(camShS, Point(myellipse->getCentroid()),
          myellipse->getSemimajor() * 1.5f, 
          myellipse->getSemiminor() * 1.5f,
          myellipse->getOrientation()));
      redrawn->setColor(myellipse->getColor());
    END_ITERATE;
    cout << "I found " << ellipses.size() << " ellipses " << endl;
  }
  

  $setupmachine{
    Eye =C=> Report =C=> SpeechNode("done")
  }
}

REGISTER_BEHAVIOR(ExtractEllipse);
