//-*-c++-*-
#ifndef INCLUDED_CamMapLab_h_
#define INCLUDED_CamMapLab_h_

#include "Behaviors/StateMachine.h"
#include "DualCoding/DualCoding.h"
#include "Sound/SoundManager.h"

using namespace DualCoding;

class CamMapLab : public VisualRoutinesStateNode {
public:
  CamMapLab(): VisualRoutinesStateNode("CamMapLab") {}
  
class BuildCamMap : public VisualRoutinesStateNode {
public:
  BuildCamMap() : VisualRoutinesStateNode("BuildCamMap") {}
  
  virtual void DoStart() {
    
    //**************** Set up map builder request ****************
    const int pink_index = ProjectInterface::getColorIndex("pink");
    const int orange_index = ProjectInterface::getColorIndex("orange");
    const int green_index = ProjectInterface::getColorIndex("green");
    const int yellow_index = ProjectInterface::getColorIndex("yellow");
    const int blue_index = ProjectInterface::getColorIndex("blue");

    MapBuilderRequest req(MapBuilderRequest::cameraMap);
	req.maxDist = 1500;
	req.numSamples = 1;
	req.clearShapes = true;

    req.objectColors[lineDataType].insert(yellow_index);
    req.occluderColors[lineDataType].insert(pink_index);
    req.occluderColors[lineDataType].insert(blue_index);

    req.objectColors[ellipseDataType].insert(pink_index);
    req.objectColors[ellipseDataType].insert(blue_index);

	req.immediateRequest = true;
	unsigned int mapreq_id = mapBuilder.executeRequest(req);
	postStateCompletion();

  }

};


	class ExamineMapLab : public VisualRoutinesStateNode {
	public:
		ExamineMapLab() : VisualRoutinesStateNode("ExamineMapLab") {}

		virtual void DoStart() {
    	sndman->playFile("barklow.wav");
    	cout << "MapBuilder found " << camShS.allShapes(LineData).size() << " Lines." << endl;
	cout << "MapBuilder found " << camShS.allShapes(EllipseData).size() << "Ellipses." << endl;
  	}
	};
	virtual void setup() {
#statemachine
	startnode: BuildCamMap() =C=> ExamineMapLab()
#endstatemachine
			}
};

#endif
