// Includes
#include "main.h"
#include "ImGui_DeviceAGK.h"

// Namespace
using namespace AGK;

app App;
bool show_another_window = true;
bool show_demo_window = true;

void app::Begin(void)
{
	agk::SetVirtualResolution(DEVICE_WIDTH, DEVICE_HEIGHT);
	agk::SetClearColor(151, 170, 204); // light blue
	agk::SetSyncRate(60, 0);
	agk::SetScissor(0, 0, 0, 0);

	IM_NEW(ImGui_DeviceAGK);
	ImGuiDevice->SetScaleFactor(1.25f);
}

int app::Loop(void)
{
	static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
	ImGuiIO& io = ImGui::GetIO();// (void)io;

	ImGuiDevice->ProcessInputs();

	ImGuiDevice->NewFrame();

	// 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!).
	if (show_demo_window)
		ImGui::ShowDemoWindow(&show_demo_window);

	// 2. Show a simple window that we create ourselves. We use a Begin/End pair to create a named window.
	{
		static float f = 0.0f;
		static int counter = 0;

		ImGui::Begin("Hello, world!");                          // Create a window called "Hello, world!" and append into it.

		ImGui::Text("This is some useful text.");               // Display some text (you can use a format strings too)
		ImGui::Checkbox("Demo Window", &show_demo_window);      // Edit bools storing our window open/close state
		ImGui::Checkbox("Another Window", &show_another_window);

		ImGui::SliderFloat("float", &f, 0.0f, 1.0f);            // Edit 1 float using a slider from 0.0f to 1.0f
		ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color

		if (ImGui::Button("Button"))                            // Buttons return true when clicked (most widgets return true when edited/activated)
			counter++;
		ImGui::SameLine();
		ImGui::Text("counter = %d", counter);

		ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
		ImGui::End();
	}

	// 3. Show another simple window.
	ImVec2 pos, size;
	if (show_another_window) {
		ImGui::Begin("Another Window", &show_another_window);   // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked)
		ImGui::Text("Hello from another window!");
		if (ImGui::Button("Close Me"))
			show_another_window = false;

		pos = ImGui::GetWindowPos();
		size = ImGui::GetWindowSize();
		ImGui::End();
	}

	agk::SetClearColor(
		UINT(clear_color.x * 255.0f),
		UINT(clear_color.y * 255.0f),
		UINT(clear_color.z * 255.0f));
	agk::ClearScreen();
	ImGuiDevice->Render();

	//float scale = ImGuiDevice->GetScaleFactor();
	//agk::DrawBox(pos.x*scale, pos.y*scale, (pos.x + size.x)*scale, (pos.y + size.y)*scale, 0xff0000ff, 0xff0000ff, 0xff0000ff, 0xff0000ff, 0);
	//agk::Print(agk::ScreenFPS());
	agk::Sync();

	return 0; // return 1 to close app
}


void app::End(void)
{
}
