#pragma once

#include <SDL2/SDL.h>
#include "asset.h"
#include "screen.h"
#include "text.h"
#include "texture.h"
#include "utils.h"
#include <string>
#include <vector>

#ifndef DEBUG_H
#define DEBUG_H

using namespace std;

// Clase Debug
class Debug
{
private:
	// Objetos y punteros
	SDL_Renderer *renderer; // El renderizador de la ventana
	Screen *screen;			// Objeto encargado de dibujar en pantalla
	Asset *asset;			// Objeto con los ficheros de recursos
	Text *text;				// Objeto encargado de escribir texto en pantalla
	Texture *texture;		// Textura para el texto

	// Variables
	vector<string> slot; // Vector con los textos a escribir
	vector<string> log;  // Vector con los textos a escribir
	int x;						   // Posicion donde escribir el texto de debug
	int y;						   // Posición donde escribir el texto de debug
	bool enabled;				   // Indica si esta activo el modo debug

public:
	// Constructor
	Debug(SDL_Renderer *renderer, Screen *screen, Asset *asset);

	// Destructor
	~Debug();

	// Actualiza las variables
	void update();

	// Dibuja en pantalla
	void render();

	// Establece la posición donde se colocará la información de debug
	void setPos(SDL_Point p);

	// Añade un texto para mostrar
	void add(string text);

	// Borra la información de debug
	void clear();

	// Añade un texto para mostrar en el apartado log
	void addToLog(string text);

	// Borra la información de debug del apartado log
	void clearLog();

	// Establece el valor de la variable
	void setEnabled(bool value);

	// Obtiene el valor de la variable
	bool getEnabled();

	// Cambia el valor de la variable
	void switchEnabled();
};

#endif
