/* A clickable button widget
 * 
 */

#ifndef _MENUBUTTON_H_
#define _MENUBUTTON_H_

#include <SDL.h>
#include <SDL_ttf.h>
#include <string>

using std::string;

// fixme: there's probably a better way to do this, but SDL's event model
//        has me hard-pressed to figure out what it is.
enum ButtonAction {BUTTON_BUILD=0x1, BUTTON_ATTACK=0x2, BUTTON_MOVE=0x4,
		   BUTTON_BUILD_ATTACKER=0x8, BUTTON_BUILD_DEFENDER=0x10,
		   BUTTON_BUILD_PRODUCER=0x20, BUTTON_END_TURN=0x40};

class MenuButton
{
 public:
    MenuButton(string text = "", TTF_Font* font = NULL, int x = 0, int y = 0,
	       ButtonAction action = BUTTON_BUILD);

    // Selectable buttons change colour for the duration they are selected,
    // and should ignore clicks while selected
    void set_hover(bool is_hovering);
    void draw(SDL_Surface* display, int colour = 0x000000,
	      int background_colour = 0x888888);

    bool is_at(int test_x, int test_y);
    ButtonAction get_action() const { return action; }

 private:
    string text;
    int x;
    int y;

    bool hover;

    TTF_Font* font;

    ButtonAction action;
};

#endif