#include "Behaviors/StateMachine.h"

// Generates a SIFT database of the SnackWorld objects

$nodeclass SiftTrainer : VisualRoutinesStateNode {

	$nodeclass CreateDatabase : VisualRoutinesStateNode : doStart {
		mapBuilder->newSiftMatcher("snackWorldSift.dat");
	}

	$nodeclass TrainCobot : VisualRoutinesStateNode : doStart {
		mapBuilder->trainSiftObject("snackWorldSift.dat", "cobot");
	}

	$nodeclass TrainPretzels : VisualRoutinesStateNode : doStart {
		mapBuilder->trainSiftObject("snackWorldSift.dat", "pretzels");
	}

	$nodeclass TrainCrackers : VisualRoutinesStateNode : doStart {
		mapBuilder->trainSiftObject("snackWorldSift.dat", "crackers");
	}

	$nodeclass TrainGum : VisualRoutinesStateNode : doStart {
		mapBuilder->trainSiftObject("snackWorldSift.dat", "gum");
	}

	$nodeclass SaveDatabase : VisualRoutinesStateNode : doStart {
		mapBuilder->saveSiftDatabase("snackWorldSift.dat");
	}


	$setupmachine {
		CreateDatabase =N=> ask

		ask: SpeechNode($, "train or save?")
		ask =TM("train")=> train
		ask =TM("save")=> save

		train: SpeechNode($, "pretzels, crackers, or gum?")
		train =TM("pretzels")=> TrainPretzels =N=> ask
		train =TM("crackers")=> TrainCrackers =N=> ask
		train =TM("gum")=> TrainGum =N=> ask
	
		save: SaveDatabase =N=> SpeechNode("done")
	}
}

REGISTER_BEHAVIOR(SiftTrainer);
