#pragma once

#include <SDL3/SDL.h>

#include <cstdint>  // for uint8_t
#include <string>   // for string, basic_string

// Clase Lang
class Lang {
   public:
    // Códigos de idioma (basados en la convención IETF de los ficheros de locale)
    enum class Code : std::uint8_t {
        ES_ES = 0,
        BA_BA = 1,
        EN_UK = 2,
    };

    static constexpr int MAX_LANGUAGES = 3;  // Número total de idiomas disponibles

    // Singleton API
    static void init();           // Crea la instancia
    static void destroy();        // Libera la instancia
    static auto get() -> Lang *;  // Obtiene el puntero a la instancia

    ~Lang();  // Destructor

    auto setLang(Code lang) -> bool;         // Inicializa los textos del juego en el idioma seleccionado
    auto getText(int index) -> std::string;  // Obtiene la cadena de texto del indice

    static auto nextLanguage(Code c) -> Code;  // Devuelve el siguiente idioma del ciclo

   private:
    static constexpr int MAX_TEXT_STRINGS = 100;

    std::string text_strings_[MAX_TEXT_STRINGS];  // Vector con los textos

    static Lang *instance;  // Instancia única

    Lang();  // Constructor privado (usar Lang::init)
};
