#pragma once

#include "Logger/LiteLogger.h"
#include "Platform.h"

// Setting global memory size
#define GECS_GLOBAL_MEMORY_CAPACITY 134217728 // 128 MB

// Setting system manager memory size
#define GECS_SYSTEM_MANAGER_MEMORY_CAPACITY 8388608 // 8 MB

// Setting event buffer memory size
#define GECS_EVENT_BUFFER_MEMORY_SIZE 4194304 // 4 MB

// Chunks settings
#define ENTITY_CONTAINER_CHUNK_MAX_OBJECTS 512
#define COMPONENT_CONTAINER_CHUNK_MAX_OBJECTS 512

// Managers tables settings
#define ENTITY_COMPONENT_TABLE_GROW_SIZE 1024
#define COMPONENT_TABLE_GROW_SIZE 1024

// Handle settings
#define HANDLE_MANAGER_GROW_SIZE 1024

namespace GECS {
	class EntityManager;
	class ComponentManager;
	class SystemManager;
	
	namespace Event {
		class EventQueue;
	}

	namespace Util {
		class EngineTimer;
	}

	namespace Memory {
		class GlobalMemoryManager;
		GECS_API extern GlobalMemoryManager* g_globalMemManager; // global manager
	}

	class GECSMain;
	GECS_API extern GECSMain* GECSInstance;

	GECS_API void Init();
	GECS_API void Destroy();
}