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

$nodeclass BallTrackDemo : VisualRoutinesStateNode {
  
  $provide BlobData *target;

  $nodeclass Find : MapBuilderNode : doStart {
    mapreq.addObjectColor(blobDataType,"red");
  }

  $nodeclass Select : VisualRoutinesStateNode : doStart {
    $reference BallTrackDemo::target;

    int area = 0;

    NEW_SHAPEVEC(blobs,BlobData,select_type<BlobData>(camShS));
    SHAPEVEC_ITERATE(blobs,BlobData,myBlob)
      if (myBlob->getArea() > area) {
	area = myBlob->getArea();
	target = new BlobData(myBlob);
      }
    END_ITERATE

    if (area == 0 || blobs.size() == 0) {
      cout << "No targets found!" << endl;
    }
  }

  $nodeclass Seek : StateNode : doStart {
    LookoutCamshiftRequest lcr = LookoutCamshiftRequest(*target);
    Lookout lk = Lookout();

    lk.doStart();
    lk.executeRequest(lcr);
  }

  $setupmachine {
    Find =C=> Select
  }
}

REGISTER_BEHAVIOR(BallTrackDemo);
