import json
import os

from libs.xdi18n.xdl18n import init_i18n, XDI18n, _i18n_instance, set_language, t


# Способ 1: Прямое использование класса
def example_direct():
    # Создаем экземпляр с локализациями из вашего кода
    i18n = XDI18n(default_lang="en_us")

    # Добавляем локализации
    i18n.add_locale("en_us", "English", {
        "win": "You WON! Congratulations!",
        "greeting": "Hello, {name}! Welcome to {app}!",
        "secret_teto": "[secret] PEAR!"
    })

    i18n.add_locale("ru_ru", "Русский", {
        "win": "Поздравляю ВЫ ПОБЕДИЛИ!",
        "greeting": "Привет, {name}! Добро пожаловать в {app}!",
        "secret_teto": "[secret] ГРУША!"
    })

    # Используем разные языки
    i18n.set_language("ru_ru")
    print(i18n.t("win"))  # Поздравляю ВЫ ПОБЕДИЛИ!
    print(i18n.t("greeting", name="Иван", app="игру"))  # Привет, Иван! Добро пожаловать в игру!

    i18n.set_language("en_us")
    print(i18n.t("greeting", name="John", app="game"))  # Hello, John! Welcome to game!


# Способ 2: Использование глобального экземпляра
def example_global():
    init_i18n("en_us")

    # Добавляем локализации в глобальный экземпляр

    _i18n_instance.add_locale("en_us", "English", {
        "win": "You WON! Congratulations!",
        "greeting": "Hello, {name}!",
    })
    _i18n_instance.add_locale("ru_ru", "Русский", {
        "win": "Поздравляю ВЫ ПОБЕДИЛИ!",
        "greeting": "Привет, {name}!",
    })

    set_language("ru_ru")
    print(t("greeting", name="Анна"))  # Привет, Анна!


# Способ 3: Загрузка из JSON-файлов
def example_from_files():
    # Создаем папку с файлами локализаций
    os.makedirs("locales", exist_ok=True)

    # Создаем файл английской локализации
    with open("locales/en_us.json", "w", encoding="utf-8") as f:
        json.dump({
            "lang_name": "English",
            "translations": {
                "start": "Game started!",
                "score": "Your score: {points}"
            }
        }, f, ensure_ascii=False, indent=2)

    # Создаем файл русской локализации
    with open("locales/ru_ru.json", "w", encoding="utf-8") as f:
        json.dump({
            "lang_name": "Русский",
            "translations": {
                "start": "Игра началась!",
                "score": "Ваш счёт: {points}"
            }
        }, f, ensure_ascii=False, indent=2)

    # Загружаем из папки
    i18n = XDI18n(locales_dir="locales")
    i18n.set_language("ru_ru")
    print(i18n.t("score", points=100))  # Ваш счёт: 100


if __name__ == "__main__":
    example_direct()
    example_global()
    example_from_files()