#pragma once

#include <string>
#include <vector>

namespace Difficulty {

/**
 * @brief Códigos que identifican unívocamente cada nivel de dificultad.
 */
enum class Code {
    EASY = 0,
    NORMAL = 1,
    HARD = 2,
};

/**
 * @brief Estructura que asocia un código de dificultad con su nombre traducible.
 */
struct Info {
        Code code;
        std::string name;
};

// --- Interfaz Pública ---

/**
 * @brief Inicializa la lista de dificultades con sus valores por defecto.
 */
void init();

/**
 * @brief Devuelve una referencia al vector de todas las dificultades para su lectura o modificación.
 * @return Referencia a `std::vector<Info>&`.
 */
auto getDifficulties() -> std::vector<Info>&;

/**
 * @brief Obtiene el nombre de una dificultad a partir de su código.
 * @param code El código de la dificultad.
 * @return El nombre de la dificultad.
 */
auto getNameFromCode(Code code) -> std::string;

/**
 * @brief Obtiene el código de una dificultad a partir de su nombre.
 * @param name El nombre de la dificultad.
 * @return El código de la dificultad.
 */
auto getCodeFromName(const std::string& name) -> Code;

}  // namespace Difficulty