#ifndef INPUT_H_
#define INPUT_H_

extern int invertControl;
//extern int should_render;

extern float zoomDist;
extern float lastZoomDist;
extern bool readyZoomTog;
extern bool readyBlinkTog;
extern bool readyBlink;
extern bool readyManualSave;
extern bool readyResetPlayer;
extern bool readyPrintDetail;
extern bool shiftDown;
extern bool controlDown;
extern float cubeScale;
extern bool readyCubeScale;
extern bool boundsTog;
extern bool readyBoundsTog;
extern bool wireframeOn;
extern bool readyWireframe;
extern bool gridOn;
extern bool readyGrid;
extern int vsync;
extern bool readyVsync;
extern bool reloadShaders;
extern bool readyReloadShaders;
extern int fontIdx;
extern bool reloadFont;
extern bool readyReloadFont;
extern bool enableTracking;
extern bool readyTrackingTog;
extern bool readyPlayerTog;
extern bool hiddenTerrain;
extern int hiddenWater;
extern int hiddenSky;
extern int hiddenCloud;
extern int readyHideTerrain;
extern int readyHideWater;
extern int readyHideSky;
extern int readyHideCloud;
extern int readyRendMode;
extern bool readyWaterHeight;
extern bool waterHeightShow;

//extern float theta; // moved to camera->theta
//extern float phi;
extern float x_input;
extern float y_input;
extern int is_moving;
extern int is_turning;
extern int is_elevating;

int printKeys();
extern const char *keystr[30];

void processInput(GLFWwindow *window);

void framebuffer_size_callback(GLFWwindow* window, int width, int height);

extern int is_pressed;
extern bool mouse_drag;
extern bool mouse_drag_started;
extern float lastMouseX, lastMouseY;
extern float lockMouseX, lockMouseY;

void mouse_mov_callback(GLFWwindow* window, double xpos, double ypos);

extern bool click_ready;
extern bool LMB_press;
extern bool RMB_press;
extern int click_trace;


void mouse_btn_callback(GLFWwindow* window, int button, int action, int mods);

extern float scrollStep;

void scroll_callback(GLFWwindow* window, double xoffset, double yoffset);

#endif
