/*!
 * \file include/UI.h
 * \brief Abstract UI interface
 *
 * \author xythobuz
 */

#ifndef _UI_H_
#define _UI_H_

#include <functional>
#include <list>
#include <memory>
#include <tuple>

#include "imgui/imgui.h"

class UI {
public:
    static int initialize();
    static void eventsFinished();
    static void display();
    static void shutdown();

    static void setVisible(bool v);
    static bool isVisible();

    static void handleKeyboard(KeyboardButton key, bool pressed);
    static void handleText(char *text, bool notFinished);
    static void handleMouseClick(unsigned int x, unsigned int y, KeyboardButton button, bool released);
    static void handleMouseMotion(int xrel, int yrel, int xabs, int yabs);
    static void handleMouseScroll(int xrel, int yrel);

private:
    static void renderImGui(ImDrawList** const draw_lists, int count);

    static bool visible;
    static unsigned int fontTex;
    static std::string iniFilename;
    static std::string logFilename;
    static bool metaKeyIsActive;

    static std::list<std::tuple<KeyboardButton, bool>> keyboardEvents;
    static std::list<std::tuple<unsigned int, unsigned int, KeyboardButton, bool>> clickEvents;
    static std::list<std::tuple<int, int, int, int>> motionEvents;
    static std::list<std::tuple<int, int>> scrollEvents;
};

#endif