#pragma once

#include <string>  // for string
#include <vector>  // for vector
class Screen;
struct options_t;

struct cheevos_t
{
	int id;					 // Identificador del logro
	std::string caption;	 // Texto con el nombre del logro
	std::string description; // Texto que describe el logro
	int icon;				 // Indice del icono a utilizar en la notificación
	bool completed;			 // Indica si se ha obtenido el logro
	bool valid;				 // Indica si se puede obtener el logro
};

class Cheevos
{
private:
	// Punteros y objetos
	Screen *screen;		// Objeto encargado de dibujar en pantalla
	options_t *options; // Puntero a las opciones del juego

	// Variables
	std::vector<cheevos_t> cheevos; // Listado de logros
	bool enabled;					// Indica si los logros se pueden obtener
	std::string file;				// Fichero done leer/almacenar el estado de los logros

	// Inicializa los logros
	void init();

	// Busca un logro por id y devuelve el indice
	int find(int id);

	// Carga el estado de los logros
	void load();

	// Guarda el estado de los logros
	void save();

	// Carga el estado de los logros desde un fichero
	void loadFromFile();

	// Guarda el estado de los logros en un fichero
	void saveToFile();

public:
	// Constructor
	Cheevos(Screen *screen, options_t *options, std::string file);

	// Destructor
	~Cheevos();

	// Desbloquea un logro
	void unlock(int id);

	// Invalida un logro
	void invalidate(int id);

	// Habilita o deshabilita los logros
	void enable(bool value);

	// Lista los logros
	std::vector<cheevos_t> list();

	// Devuelve el número total de logros desbloqueados
	int unlocked();

	// Devuelve el número total de logros
	int count();

	// Vuelve a cargar los logros desde el origen
	void reload();
};