#pragma once

#include <string>
#include <string_view>

namespace poe2::platform {

enum class Language : uint8_t {
    Vietnamese,
    English
};

class I18n {
public:
    static I18n& Instance() {
        static I18n inst;
        return inst;
    }

    void SetLanguage(Language lang) noexcept { currentLang_ = lang; }
    void SetLanguageByCode(std::string_view code) noexcept {
        if (code == "en" || code == "EN" || code == "English") {
            currentLang_ = Language::English;
        } else {
            currentLang_ = Language::Vietnamese;
        }
    }

    Language GetLanguage() const noexcept { return currentLang_; }
    std::string_view GetLanguageCode() const noexcept {
        return (currentLang_ == Language::English) ? "en" : "vi";
    }

    /// @brief Tra cứu chuỗi bản địa hóa theo key
    std::string_view Translate(std::string_view key) const;

    /// @brief Tiện ích viết tắt: T(key)
    static std::string_view T(std::string_view key) {
        return Instance().Translate(key);
    }

private:
    I18n() = default;
    ~I18n() = default;

    Language currentLang_{Language::Vietnamese};
};

} // namespace poe2::platform
