#pragma once

#include <map>
#include <memory>
#include <vector>

#include "input.h"
#include "camera.h"
#include "scene.h"
#include "texture.h"
#include "fonts.h"

namespace kek {

struct KekData {
	std::map<InputListener, PeriodicCallback> periodicCallbacks;
	std::map<InputListener, KeyCallback> keyCallbacks;
	std::map<InputListener, MouseCallback> mouseCallbacks;
	std::map<KeyMapping, KeyMappingData> keyMappings;

	GLFWwindow *window;
	Shader *shader;

	Camera *activeCamera;
	Scene *activeScene;

	int screenWidth;
	int screenHeight;

	float lastFrameTime;

	std::map<std::string, std::weak_ptr<Texture>> loadedTextures;

	FT_Library freetype;
};

extern KekData kekData;

}
