#pragma once

#include <SDL2/SDL.h>
#include <string>
#include <vector>

#ifndef ASSET_H
#define ASSET_H

using namespace std;

enum assetType
{
	t_bitmap,
	t_music,
	t_sound,
	t_font,
	t_lang,
	t_data,
	t_room,
	t_enemy,
	t_item,
	t_maxAssetType
};

// Clase Asset
class Asset
{
private:
	// Estructura para definir un item
	struct item_t
	{
		string file;	 // Ruta del fichero desde la raiz del directorio
		enum assetType type; // Indica el tipo de recurso
		bool required;		 // Indica si es un fichero que debe de existir
		//bool absolute;		 // Indica si la ruta que se ha proporcionado es una ruta absoluta
	};

	// Variables
	int longestName;			  // Contiene la longitud del nombre de fichero mas largo
	vector<item_t> fileList; // Listado con todas las rutas a los ficheros
	string executablePath;	  // Ruta al ejecutable
	bool verbose;				  // Indica si ha de mostrar información por pantalla

	// Comprueba que existe un fichero
	bool checkFile(string executablePath);

	// Devuelve el nombre del tipo de recurso
	string getTypeName(int type);

public:
	// Constructor
	Asset(string path);

	// Destructor
	~Asset();

	// Añade un elemento a la lista
	void add(string file, enum assetType type, bool required = true, bool absolute = false);

	// Devuelve un elemento de la lista a partir de una cadena
	string get(string text);

	// Comprueba que existen todos los elementos
	bool check();

	// Establece si ha de mostrar texto por pantalla
	void setVerbose(bool value);
};

#endif
