#pragma once
#include <chrono>
#include <imgui.h>

 struct EngineStatistics {
	uint32_t lastSampleTime;
	float frameTime;
	uint32_t verts;
	uint32_t DC;

	uint64_t frames;
	uint64_t  FPS;
};
extern EngineStatistics* ES;

inline void PerfomanceSamplerInit(){
	ES = new EngineStatistics();
	ES->frames = 0;
	ES->lastSampleTime = 0;
	ES->lastSampleTime = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count();

}

inline void SamplePerformance(void) {
	ES->frames++; 
	ES->DC = 0; 
	ES->verts = 0; 
	unsigned int  now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); 
	unsigned int MilliSecondsPast = now - ES->lastSampleTime; 
	if (MilliSecondsPast >= 1000) {
			
			ES->frameTime = (float)1000 / ES->frames; 
			ES->FPS = ES->frames; 
			ES->frames = 0; 
			ES->lastSampleTime = now; 
	}
}



inline void ShowStats() {
	ImGui::Begin("Statistics", false, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove);

	ImGui::Text("FPS: %i", ES->FPS);
	ImGui::Text("Frame Time: %f", ES->frameTime);
	ImGui::Text("Verts: %i", ES->verts);
	ImGui::Text("Draw Calls: %i", ES->DC);
	ImGui::End();

}