#ifndef COUCH_H
#define COUCH_H
#include <GL/glew.h>
#include <GLFW/glfw3.h>

#include <vector>

#include "types.h"

typedef void (*KeyHandler)(Window *window, int key, int code, int action, int mods);
typedef void (*MousePositionHandler)(Window *window, double xpos, double ypos, double xrel, double yrel);

class Input {
public:
  static Input *GetInstance();
  void Use(Window *window);
  std::vector<KeyHandler> keyHandlers;
  std::vector<MousePositionHandler> mousePositionHandlers;
private:
  bool firstMousePositionUpdate = true;
  double lastx, lasty;
  Input();
  static void HandleKeys(Window *window, int key, int code, int action, int mods);
  static void HandleMousePosition(Window *window, double xpos, double ypos);
  static Input *instance;
};

#endif // COUCH_H