#include "gui.hpp"

#include "style/style.hpp"
#include "plots/2d/implot.hpp"
#include "plots/3d/implot3d.hpp"

namespace VE
{
	gui::gui(std::unique_ptr<glfw>& g) : m_glfw { g }
	{
		ImGui::CreateContext();
		ImGui::StyleColorsDark();
    
		ImGuiIO& io = ImGui::GetIO(); (void)io;
		io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;      
    io.IniFilename = nullptr;
    
		ImGuiStyle& style = ImGui::GetStyle();
		if (io.ConfigFlags)
		{
			style.WindowRounding = 0.0f;
			style.Colors[ImGuiCol_WindowBg].w = 1.0f;
		}

		GLFWwindow* window = m_glfw->get_win();
		ImGui_ImplGlfw_InitForOpenGL(window, true);
		ImGui_ImplOpenGL3_Init("#version 410");

    ImPlot3D::CreateContext();
    ImPlot::CreateContext();

    style::init();
	}

	gui::~gui()
	{
		ImGui_ImplOpenGL3_Shutdown();
		ImGui_ImplGlfw_Shutdown();
		ImGui::DestroyContext();
	}
	
	void gui::begin_frame()
	{
		ImGui_ImplOpenGL3_NewFrame();
		ImGui_ImplGlfw_NewFrame();
		ImGui::NewFrame();
	}

	void gui::end_frame()
	{
		ImGui::Render();
		ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
	}
}


