#pragma once
#include <Windows.h>

#include <functional>

#define GLFW_INCLUDE_NONE
#define GLFW_INCLUDE_VULKAN
#define GLFW_EXPOSE_NATIVE_WIN32
#include <GLFW/glfw3.h>

#include "imgui.h"

class DrawData {
public:
    GLFWwindow* window = nullptr;
    HWND window_handle = nullptr;
    ImVec4 clear_color = {};
    ImVec2 window_size = {};
};

class ImGuiCallbacks {
public:
    std::function<void(DrawData&)> initFunc = nullptr;
    std::function<void(DrawData&)> drawFunc = nullptr;
    std::function<void(DrawData&)> cleanupFunc = nullptr;
};

int startImgui(ImGuiCallbacks& callbacks, const char* title, int windowWidth, int windowHeight);

ImVec2 getWindowSize(GLFWwindow* window);
