#pragma once

#include <string> // para string
#include <vector> // para vector

/*
    Esta clase sirve para añadir elementos hiScoreEntry_r a un vector (tabla), de manera
    que la tabla siempre está ordenada.

    Además tiene un método para dejar la tabla con sus valores iniciales y métodos para
    leer y escribir la tabla a un fichero
*/

// Estructura para las entradas de la tabla de recirds
struct HiScoreEntry
{
	std::string name; // Nombre
	int score;		  // Puntuación

	// Constructor
	explicit HiScoreEntry(const std::string &n = "", int s = 0)
		: name(n), score(s) {}
};

// Clase ManageHiScoreTable
class ManageHiScoreTable
{
private:
    // Variables
    std::vector<HiScoreEntry> &table_; // Tabla con los records

    // Ordena la tabla
    void sort();

public:
    // Constructor
    explicit ManageHiScoreTable(std::vector<HiScoreEntry> &table)
        : table_(table) {}

    // Destructor
    ~ManageHiScoreTable() = default;

    // Resetea la tabla a los valores por defecto
    void clear();

    // Añade un elemento a la tabla
    void add(HiScoreEntry entry);

    // Carga la tabla con los datos de un fichero
    bool loadFromFile(const std::string &file_path);

    // Guarda la tabla en un fichero
    bool saveToFile(const std::string &file_path);
};