#include <stdlib.h>
#include "entity.h"
#include "SDL.h"

#include "sdl-common.h"


/**sdl_mouse_get_coords
 * Sets the mouse kv's after quering SDL.
 *
 */
static void
sdl_mouse_get_coords (ENode * node, gchar * attr)
{
  int x = -1;
  int y = -1;
  static char buf[256] = "";

  /* Query SDL for mouse information. */
  (void) SDL_GetMouseState(&x, &y);

  /* Get X. */
  snprintf (buf, 255, "%d", x);
  enode_attrib_str (node, "x", buf);

  /* Get Y. */
  snprintf (buf, 255, "%d", y);
  enode_attrib_str (node, "y", buf);

}


/**sdl_mouse_get_mouse
 * Sets the mouse kv's after quering SDL.
 *
 */
static void
sdl_mouse_get_buttons (ENode * node, gchar * attr)
{
  int x = -1;
  int y = -1;
  Uint8 button_mask;

  /* Query SDL for mouse information. */
  button_mask = SDL_GetMouseState(&x, &y);

  if (button_mask == SDL_BUTTON(1))
    {
      enode_attrib_str (node, "button1", "true");
    }
  else
    {
      enode_attrib_str (node, "button1", "false");
    }

  if (button_mask == SDL_BUTTON(2))
    {
      enode_attrib_str (node, "button2", "true");
    }
  else
    {
      enode_attrib_str (node, "button2", "false");
    }

  if (button_mask == SDL_BUTTON(3))
    {
      enode_attrib_str (node, "button3", "true");
    }
  else
    {
      enode_attrib_str (node, "button3", "false");
    }
}


/**sdl_mouse_setup
 * setup the mouse.
 */
static void
sdl_mouse_setup (ENode * node)
{
}


/**sdl_sprite_destroy
 * Free the sprite.
 */
static void
sdl_mouse_destroy (ENode * node)
{
}


/**sdl_mouse_register
 * Register the sdl mouse attributes. 
 */
void sdl_mouse_register (void)
{
  Element *element;
  ElementAttr *e_attr;

  /* Register sdl-mouse. */
  element = g_new0 (Element, 1);
  element->render_func = sdl_mouse_setup; 
  element->destroy_func = sdl_mouse_destroy;
  element->parent_func = NULL;
  element->tag = "sdl-mouse";
  element->description = "Create a new SDL window.";
  element_register (element);

  /* X position attribute. */
  e_attr = g_new0 (ElementAttr, 1);
  e_attr->attribute = "x";
  e_attr->description = "X position of the mouse";
  e_attr->value_desc = "integer";
  e_attr->possible_values = "-1,*";
  e_attr->set_attr_func = NULL;
  e_attr->get_attr_func = sdl_mouse_get_coords;
  element_register_attrib (element, e_attr);

  /* Y position attribute. */
  e_attr = g_new0 (ElementAttr, 1);
  e_attr->attribute = "y";
  e_attr->description = "Y position of the mouse.";
  e_attr->value_desc = "integer";
  e_attr->possible_values = "-1,*";
  e_attr->set_attr_func = NULL;
  e_attr->get_attr_func = sdl_mouse_get_coords;
  element_register_attrib (element, e_attr);

  /* Button1 attribute. */
  e_attr = g_new0 (ElementAttr, 1);
  e_attr->attribute = "button1";
  e_attr->description = "Button 1 on the mouse";
  e_attr->value_desc = "boolean";
  e_attr->possible_values = "true,false";
  e_attr->set_attr_func = NULL;
  e_attr->get_attr_func = sdl_mouse_get_buttons;
  element_register_attrib (element, e_attr);

  /* Button2 attribute. */
  e_attr = g_new0 (ElementAttr, 1);
  e_attr->attribute = "button2";
  e_attr->description = "Button 2 on the mouse";
  e_attr->value_desc = "boolean";
  e_attr->possible_values = "true,false";
  e_attr->set_attr_func = NULL;
  e_attr->get_attr_func = sdl_mouse_get_buttons;
  element_register_attrib (element, e_attr);

  /* Button3 attribute. */
  e_attr = g_new0 (ElementAttr, 1);
  e_attr->attribute = "button3";
  e_attr->description = "Button 3 on the mouse";
  e_attr->value_desc = "boolean";
  e_attr->possible_values = "true,false";
  e_attr->set_attr_func = NULL;
  e_attr->get_attr_func = sdl_mouse_get_buttons;
  element_register_attrib (element, e_attr);
}


syntax highlighted by Code2HTML, v. 0.9.1