#pragma once
#include "ogl.hpp"
#include "common.hpp"
#include <queue>


class Input {
    private:
        typedef struct {
            int x, y;
        } poskey_t;
        typedef struct {
            double x, y;
            float z;
        } click_t;

        static const size_t maxevents;
        static Input* inst;
        static void keyFun(GLFWwindow*, int, int, int, int);
        static void clickFun(GLFWwindow*, int, int, int);
        static void scrollFun(GLFWwindow*, double, double);

        Window* const window;
        int pans;
        std::queue<poskey_t> poskeys;
        std::queue<click_t> clicks;

    public:
        Input(Window*);

        bool getPanKey(int&);
        bool getPosKey(int&, int&); // (-1, 0, 1)
        bool getClick(double&, double&, float&);
        void shouldClose();
};