#pragma once

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

#ifndef ASSET_H
#define ASSET_H

enum assetType
{
	bitmap,
	music,
	sound,
	font,
	lang,
	data,
	room,
	enemy,
	item,
	maxAssetType
};

// Clase Asset
class Asset
{
private:
	// Estructura para definir un item
	struct item_t
	{
		std::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
	};

	int longest_name; // Contiene la longitud del nombre de fichero mas largo

	std::vector<item_t> mFileList;
	std::string mExecutablePath;

	// Comprueba que existe un fichero
	bool checkFile(std::string path);

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

public:
	// Constructor
	Asset(std::string path);

	// Destructor
	~Asset();

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

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

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

#endif
