#ifndef BUTTON_BEHAVIOUR_h
#define BUTTON_BEHAVIOUR_h
#include "Arduino.h"
#include "Behaviours.h"
#include <VizBlocks.h>

class ButtonPressed : public Behaviour
{
	/*
	 * Class that defines a behaviour that publishes a
	 * ButtonPressed message to the input topic of the
	 * MQQT broker
	 */
	VizBlocks* _node;

public:
	ButtonPressed(VizBlocks* node, String name = "ButtonPressed")
	char* args();
	String start(String args);
}

class ButtonReleased : public Behaviour
{
	/*
	 * Class that defines a behaviour that publishes a
	 * ButtonReleased message to the input topic of the
	 * MQQT broker
	 */
	VizBlocks* _node;

public:
	ButtonReleased(VizBlocks* node, String name = "ButtonReleased");
	char* args()
	String start(String args)
};

class ButtonClicked : public Behaviour
{
	/*
	 * Class that defines a behaviour that publishes a
	 * ButtonClicked message to the input topic of the
	 * MQQT broker
	 */
	VizBlocks* _node;

public:
	ButtonClicked(VizBlocks* node, String name = "ButtonClicked");
	char* args()
	String start(String args);
};

class ButtonHeld : public Behaviour
{
	/*
	 * Class that defines a behaviour that publishes a
	 * ButtonLongPressed message to the input topic of the
	 * MQQT broker
	 */
	VizBlocks* _node;

public:
	ButtonHeld(VizBlocks* node, String name = "ButtonHeld")
	/**
	   @brief What does this do?
	 */
	char* args()
	{
		return "<String buttonId>";
	};

	/**
	   @brief What does this do?
	 */
	String start(String args)
	{
		 //This is where you do your stuff for a simple behaviour
		String str = "{\"id\":\"" + String(_node->getId()) + "\",\"Input\":{\"type\":\"" + String(name()) + "\",\"button\":\"" + args + "\"}}";
		_node->announce(str);

		return "ButtonHeld behaviour " + _name + " with (" + args + ")";
	}
};

class ButtonTick : public Behaviour
{
	/*
	 * Class that defines a behaviour that publishes a
	 * ButtonRepeatPressed message to the input topic of the
	 * MQQT broker
	 */
	VizBlocks* _node;

public:
	ButtonTick(VizBlocks* node, String name = "ButtonTick") :
		Behaviour(name), _node(node)
	{ }

	/**
	   @brief What does this do?
	 */
	char* args()
	{
		return "<String buttonId>";
	};
	String start(String args);
};

#endif