#pragma once

#include <string>  // Para string
#include <vector>  // Para vector

class Stats {
   private:
    struct RoomData {
        std::string name;  // Nombre de la habitación
        int visited;       // Cuenta las veces que se ha visitado una habitación
        int died;          // Cuenta las veces que se ha muerto en una habitación
    };

    // Variables
    std::vector<RoomData> buffer_list_;  // Lista con las estadisticas temporales por habitación
    std::vector<RoomData> list_;         // Lista con las estadisticas completas por habitación
    std::string buffer_path_;            // Fichero con las estadísticas temporales
    std::string file_path_;              // Fichero con las estadísticas completas

    // Busca una entrada en la lista por nombre
    static auto findByName(const std::string& name, const std::vector<RoomData>& list) -> int;

    // Carga las estadisticas desde un fichero
    static void loadFromFile(const std::string& file_path, std::vector<RoomData>& list);

    // Guarda las estadisticas en un fichero
    static void saveToFile(const std::string& file_path, const std::vector<RoomData>& list);

    // Calcula cual es la habitación con más muertes
    void checkWorstNightmare();

    // Vuelca los datos del buffer en la lista de estadisticas
    void updateListFromBuffer();

   public:
    // Constructor
    Stats(std::string file, std::string buffer);

    // Destructor
    ~Stats();

    // Inicializador
    void init();

    // Añade una muerte a las estadisticas
    void addDeath(const std::string& name);

    // Añade una visita a las estadisticas
    void addVisit(const std::string& name);
};