#pragma once

#include <string>
#include <vector>

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, const std::string &n, const std::string &fn)
            : code(c), name(n), file_name(fn) {}
    };

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

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

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

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

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

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

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

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

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