///////////////////////////////////////////////////////////
///////////////// Have an itch? Scratch it! ///////////////
///////////////////////// SCRATCH /////////////////////////
/////////////////////  A MUD  Server   ////////////////////
///////////////////// By: Jared Devall ////////////////////
/////////////////////      Thanks:     ////////////////////
/////////////////////  DIKU/Merc/ROM   ////////////////////
///////////////////// Aetas/Deus Gang  ////////////////////
/////////////////////       Beej       ////////////////////
///////////////////////////////////////////////////////////


#ifndef __HANDLER_H_
#define __HANDLER_H_

// Includes
#include <string>
// Forwards
class Avatar;

//! Handles Account input and prompts.
class Handler {
	public:
	virtual ~Handler( ) { }
		
	virtual void Enter( Avatar * ) = 0;
	virtual void Exit( Avatar * ) = 0;
	virtual void Handle( Avatar *, const std::string & ) = 0;
	virtual std::string Prompt( Avatar * ) = 0;
};

#define DEF_HANDLER(HandlerName)				              \
class HandlerName: public Handler {			               \
	public:				                                   \
	  void Enter( Avatar * );			                     \
	  void Exit( Avatar * );						          \
      void Handle( Avatar *, const std::string & );           \
	  std::string Prompt( Avatar * );			             \
}


DEF_HANDLER(GetNameHandler);
DEF_HANDLER(InputHandler);
DEF_HANDLER(CheckNameHandler);
DEF_HANDLER(GetPasswordHandler);
//DEF_HANDLER(EditHelpHandler);
//DEF_HANDLER(EditAvatarHandler);
/*DEF_HANDLER(accountHandler);
DEF_HANDLER(inputHandler);
DEF_HANDLER(deleteHandler);
DEF_HANDLER(charCreateHandler);
DEF_HANDLER(ccNameHandler);
DEF_HANDLER(ccSurnHandler);
DEF_HANDLER(ccTooHandler);
DEF_HANDLER(ccSomethingHandler);*/

#endif