#pragma once

#include <string>  // Para string, basic_string
#include <utility>

namespace Lang {
// --- Códigos de idioma soportados ---
enum class Code : int {
    SPANISH = 0,
    VALENCIAN = 1,
    ENGLISH = 2
};

// Estructura que representa un idioma
struct Language {
        Code code;              // Código que identifica al idioma
        std::string name;       // Nombre que identifica el idioma
        std::string file_name;  // Nombre del fichero con los textos

        Language(Code c, std::string n, std::string fn)
            : code(c), name(std::move(n)), file_name(std::move(fn)) {}
};

// Carga los textos desde el fichero JSON especificado
auto loadFromFile(const std::string &file_path) -> bool;

// Obtiene el texto por clave
auto getText(const std::string &key) -> std::string;

// Obtiene el código del siguiente idioma (circular)
auto getNextLangCode(Code current_lang) -> Code;

// Obtiene el idioma correspondiente al código proporcionado
auto getLanguage(Code code) -> Language;

// Devuelve el código de un idioma a partir de un nombre
auto getCodeFromName(const std::string &name) -> Code;

// Devuelve el nombre de un idioma a partir de un código
auto getNameFromCode(Code code) -> std::string;

// Actualiza los nombres de los idiomas
void updateLanguageNames();

// Obtiene el nombre del fichero de textos asociado a un código de idioma
auto getLanguageFileName(Code code) -> std::string;

// Establece el idioma actual
void setLanguage(Code lang);
}  // namespace Lang
