#pragma once

#include <SDL2/SDL_rect.h> // Para SDL_Point
#include <string>		   // Para string, basic_string
#include <vector>		   // Para vector

struct ItemTrackerData
{
	std::string name;			// Nombre de la habitación donde se encuentra el objeto
	std::vector<SDL_Point> pos; // Lista de objetos cogidos de la habitación

	// Constructor
	ItemTrackerData(const std::string &name, const SDL_Point &position)
		: name(name)
	{
		pos.push_back(position);
	}
};

class ItemTracker
{
private:
	// [SINGLETON] Objeto privado
	static ItemTracker *item_tracker_;

	// Variables
	std::vector<ItemTrackerData> item_list_; // Lista con todos los objetos recogidos

	// Busca una entrada en la lista por nombre
	int findByName(const std::string &name);

	// Busca una entrada en la lista por posición
	int findByPos(int index, SDL_Point pos);

	// Constructor
	ItemTracker() = default;

	// Destructor
	~ItemTracker() = default;

public:
	// [SINGLETON] Crearemos el objeto con esta función estática
	static void init();

	// [SINGLETON] Destruiremos el objeto con esta función estática
	static void destroy();

	// [SINGLETON] Con este método obtenemos el objeto y podemos trabajar con él
	static ItemTracker *get();

	// Comprueba si el objeto ya ha sido cogido
	bool hasBeenPicked(const std::string &name, SDL_Point pos);

	// Añade el objeto a la lista de objetos cogidos
	void addItem(const std::string &name, SDL_Point pos);
};