import { world, ItemTypes } from "@minecraft/server";
import { CustomForm } from "./customForm.js";
import { ActionFormData } from "@minecraft/server-ui";
import { system } from "@minecraft/server";

// Функция для проверки наличия Farmer's Delight
function checkFarmersDelight() {
    try {
        // Используем ItemTypes.get() как в примере Farmer's Delight
        return ItemTypes.get("farmersdelight:farmers_book") ? true : false;
    } catch (e) {
        return false;
    }
}

// Функция для проверки наличия Crabber's Delight
function checkCrabbersDelight() {
    try {
        // Используем BlockTypes.get() как в примере Farmer's Delight
        return ItemTypes.get("crabbersdelight:book") ? true : false;
    } catch (e) {
        return false;
    }
}

function showBook(player) {
    // Проверяем, выбран ли язык, если нет — используем 'en' по умолчанию
    let lang = player.getDynamicProperty('lang');
    if (!lang) {
        lang = 'en';
        player.setDynamicProperty('lang', lang);
    }
    
    // Проверяем наличие модов
    const hasFarmersDelight = checkFarmersDelight();
    const hasCrabbersDelight = checkCrabbersDelight();
    
    // Формируем body с информацией о совместимости в формате ActionFormData от Mojang
    const bodyRawtext = [
        { "translate": "bncbook.body" },
        { "text": "\n\n" },
        { "translate": "bncbook.compatibility" },
        { "text": ":\n" },
        { "translate": "Farmer's Delight" },
        { "text": ": " }
    ];
    
    // Добавляем цвет и статус для Farmer's Delight
    if (hasFarmersDelight) {
        bodyRawtext.push({ "text": "§a" }, { "translate": "bncbook.available" });
    } else {
        bodyRawtext.push({ "text": "§c" }, { "translate": "bncbook.notFound" });
    }
    
    // Добавляем информацию о Crabber's Delight
    bodyRawtext.push(
        { "text": "§f\n" },
        { "translate": "Crabber's Delight" },
        { "text": ": " }
    );
    
    if (hasCrabbersDelight) {
        bodyRawtext.push({ "text": "§a" }, { "translate": "bncbook.available" });
    } else {
        bodyRawtext.push({ "text": "§c" }, { "translate": "bncbook.notFound" });
    }
    
    // Добавляем "\n\n" в конец массива
    bodyRawtext.push({ "text": "\n\n" });
    
    const showBookForm = new ActionFormData()
        .title("bncbook.name")
        .body({ "rawtext": bodyRawtext })
        .button("bncbook.introduction", "textures/ui/introduction_for_ui")
        //.button("farmersbook.howToPlantAddonCrops", "textures/ui/farmland_for_ui")
        .button("bncbook.howToUseKeg", "textures/ui/keg_for_ui")
        .button("bncbook.allAboutCheese", "textures/ui/cheese_for_ui")
        .button("bncbook.youMustCookThis", "textures/ui/meals_for_ui")
        .button("bncbook.recipes", "textures/ui/recipes")
        .button("bncbook.exit", "textures/ui/exit");
    showBookForm.show(player).then(response => {
        if (response.canceled) return;
        switch (response.selection) {
            case 0:
                introduction(player);
                break;
            // case 1:
            //     howToPlantAddonCrops(player)
            //     break;
            case 1:
                howToUseKeg(player);
                break;
            case 2:
                allAboutCheese(player);
                break;
            case 3:
                youMustCookThis(player);
                break;
            case 4:
                createMainCustomForm(player);
                break;
            case 5:
                // exit
                break;
        }
    });
}

function introduction(player) {
    const introductionForm = new ActionFormData()
        .title("§6Brewin' And Chewin' Bedrock")
        .body({ "rawtext": [
            { "translate": "brewinandchewin.welcome0" }, { "text": "\n" },
            { "translate": "brewinandchewin.welcome1" }, { "text": "\n" },
            { "translate": "brewinandchewin.welcome2" }, { "text": "\n" },
            { "translate": "brewinandchewin.welcome3" }
        ] })
        .button("accessibility.button.back", "textures/ui/exit");
    introductionForm.show(player).then(response => {
        if (!response.canceled && response.selection == 0) {
            showBook(player);
        }
    });
}

function howToUseKeg(player) {
    const form = new ActionFormData()
        .title("bncbook.howtousekeg")
        .body("bncbook.howtousekegbody")
        .button("accessibility.button.back", "textures/ui/exit");
    form.show(player).then(response => {
        if (!response.canceled && response.selection == 0) {
            showBook(player);
        }
    });
}

function allAboutCheese(player) {
    const form = new ActionFormData()
        .title("bncbook.allAboutCheese")
        .body("bncbook.allAboutCheeseBody")
        .button("accessibility.button.back", "textures/ui/exit");
    form.show(player).then(response => {
        if (!response.canceled && response.selection == 0) {
            showBook(player);
        }
    });
}

function youMustCookThis(player) {
    const form = new ActionFormData()
        .title("bncbook.youMustCookThis")
        .body("bncbook.youMustCookThisBody")
        .button("accessibility.button.back", "textures/ui/exit");
    form.show(player).then(response => {
        if (!response.canceled && response.selection == 0) {
            showBook(player);
        }
    });
}
function createMainCustomForm(player) {
    let customform = new CustomForm();
    // Используем только выбранный язык книги для перевода
    let lang = player.getDynamicProperty('lang') || 'en';
    let playerLangs = [lang];
    // --- Категория Food ---
    const itemTextures = [
        "textures/items/jerky",
        "textures/items/kimchi",
        "textures/items/kippers",
        "textures/items/pickled_pickles",
        "textures/items/cocoa_fudge",
        "textures/items/unripe_flaxen_cheese_wheel",
        "textures/items/unripe_scarlet_cheese_wheel"
    ];
    const foodNames = [
        "Food01",
        "Food02",
        "Food03",
        "Food04",
        "Food05",
        "Food06",
        "Food07"
    ];
    // Для сопоставления: отображаемое имя -> индекс
    const foodDisplayNames = [];
    for (let i = 0; i < itemTextures.length; i++) {
        // Переводим только на выбранный язык книги
        const translatedName = parseRawtext({ "rawtext": [ { "translate": foodNames[i] } ] }, [lang]);
        foodDisplayNames.push(translatedName);
        customform.button(parseRawtext({ "rawtext": [ { "translate": "bncbookFood" } ] }, [lang]), translatedName, itemTextures[i], true);
    }
    customform.button(parseRawtext({ "rawtext": [ { "translate": "bncbookFood" } ] }, playerLangs), parseRawtext({ "rawtext": [ { "translate": "Backtobook" } ] }, playerLangs), "textures/ui/icon_import");

    // --- Категория Drinks ---
    const blockInfos = [
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks01" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks01" } ] }, playerLangs), texture: "textures/items/beer" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks02" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks02" } ] }, playerLangs), texture: "textures/items/vodka" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks03" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks03" } ] }, playerLangs), texture: "textures/items/mead" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks04" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks04" } ] }, playerLangs), texture: "textures/items/rice_wine" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks05" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks05" } ] }, playerLangs), texture: "textures/items/pale_jane" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks06" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks06" } ] }, playerLangs), texture: "textures/items/egg_grog" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks07" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks07" } ] }, playerLangs), texture: "textures/items/glittering_grenadine" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks08" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks08" } ] }, playerLangs), texture: "textures/items/saccharine_rum" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks09" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks09" } ] }, playerLangs), texture: "textures/items/salty_folly" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks10" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks10" } ] }, playerLangs), texture: "textures/items/bloody_mary" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks11" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks11" } ] }, playerLangs), texture: "textures/items/red_rum" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks12" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks12" } ] }, playerLangs), texture: "textures/items/strongroot_ale" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks13" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks13" } ] }, playerLangs), texture: "textures/items/steel_toe_stout" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks14" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks14" } ] }, playerLangs), texture: "textures/items/dread_nog" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repDrinks15" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disDrinks15" } ] }, playerLangs), texture: "textures/items/withering_dross" }
    ];
    const drinkNames = [
        "!Beer",
        "!Vodka",
        "!Mead",
        "!Rice Wine",
        "!Pale Jane",
        "!Egg Grog",
        "Glittering\nGrenadine",
        "Saccharine\nRum",
        "Salty Folly",
        "Bloody\nMary",
        "Red Rum",
        "Strongroot\nAle",
        "Steel\nToe Stout",
        "Dread Nog",
        "Withering\nDross"
    ];
    // Для сопоставления: отображаемое имя напитка -> индекс
    const drinkDisplayNames = [];
    for (let i = 0; i < blockInfos.length; i++) {
        // Переводим только на выбранный язык книги
        const translatedDrink = parseRawtext({ "rawtext": [ { "translate": drinkNames[i] } ] }, [lang]);
        drinkDisplayNames.push(translatedDrink);
        customform.button(parseRawtext({ "rawtext": [ { "translate": "bncbookDrinks" } ] }, [lang]), translatedDrink, blockInfos[i].texture);
    }
    customform.button(parseRawtext({ "rawtext": [ { "translate": "bncbookDrinks" } ] }, playerLangs), parseRawtext({ "rawtext": [ { "translate": "Backtobook" } ] }, playerLangs), "textures/ui/icon_import");

    // --- Категория Языки ---
    const langCategory = parseRawtext({ "rawtext": [ { "translate": "bncbookLanguages" } ] }, playerLangs);
    customform.button(langCategory, "Русский", "textures/ui/lang1");
    customform.button(langCategory, "English", "textures/ui/lang0");
    customform.button(langCategory, "中文", "textures/ui/lang2");
    // Можно добавить другие языки аналогично

    // --- Заголовок и остальное ---
    customform.title(parseRawtext({ "rawtext": [ { "translate": "bncbook.recipesTitle" } ] }, playerLangs));
    const foodInfos = [
        { title: parseRawtext({ "rawtext": [ { "translate": "repFood01" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disFood01" } ] }, playerLangs), texture: "textures/items/jerky" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repFood02" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disFood02" } ] }, playerLangs), texture: "textures/items/kimchi" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repFood03" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disFood03" } ] }, playerLangs), texture: "textures/items/kippers" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repFood04" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disFood04" } ] }, playerLangs), texture: "textures/items/pickled_pickles" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repFood05" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disFood05" } ] }, playerLangs), texture: "textures/items/cocoa_fudge" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repFood06" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disFood06" } ] }, playerLangs), texture: "textures/items/unripe_flaxen_cheese_wheel" },
        { title: parseRawtext({ "rawtext": [ { "translate": "repFood07" } ] }, playerLangs), body: parseRawtext({ "rawtext": [ { "translate": "disFood07" } ] }, playerLangs), texture: "textures/items/unripe_scarlet_cheese_wheel" }
    ];
    function showFoodInfo(idx, player) {
        let info = foodInfos[idx];
        let infoForm = new CustomForm();
        infoForm.title(info.title);
        infoForm.body(info.body);
        // Переводы для кнопок
        const prevText = parseRawtext({ "rawtext": [ { "translate": "bncbook.Previous" } ] }, playerLangs);
        const nextText = parseRawtext({ "rawtext": [ { "translate": "bncbook.Next" } ] }, playerLangs);
        const homeText = parseRawtext({ "rawtext": [ { "translate": "bncbook.Home" } ] }, playerLangs);
        const recipeCat = parseRawtext({ "rawtext": [ { "translate": "bncbook.Recipe" } ] }, playerLangs);
        if (idx > 0) infoForm.button(recipeCat, prevText, "textures/ui/arrowleft");
        if (idx < foodInfos.length - 1) infoForm.button(recipeCat, nextText, "textures/ui/arrowright");
        infoForm.button(recipeCat, homeText, "textures/ui/icon_import");
        infoForm.show(player).then(res => {
            if (res.canceled) return;
            if (res.category === recipeCat) {
                if (res.text === prevText) {
                    showFoodInfo(idx - 1, player);
                } else if (res.text === nextText) {
                    showFoodInfo(idx + 1, player);
                } else if (res.text === homeText) {
                    createMainCustomForm(player);
                }
            }
        });
    }
    function showBlockInfo(idx, player) {
        let info = blockInfos[idx];
        let infoForm = new CustomForm();
        infoForm.title(info.title);
        infoForm.body(info.body);
        // Переводы для кнопок
        const prevText = parseRawtext({ "rawtext": [ { "translate": "bncbook.Previous" } ] }, playerLangs);
        const nextText = parseRawtext({ "rawtext": [ { "translate": "bncbook.Next" } ] }, playerLangs);
        const homeText = parseRawtext({ "rawtext": [ { "translate": "bncbook.Home" } ] }, playerLangs);
        const recipeCat = parseRawtext({ "rawtext": [ { "translate": "bncbook.Recipe" } ] }, playerLangs);
        if (idx > 0) infoForm.button(recipeCat, prevText, "textures/ui/arrow_left");
        if (idx < blockInfos.length - 1) infoForm.button(recipeCat, nextText, "textures/ui/arrow_right");
        infoForm.button(recipeCat, homeText, "textures/ui/icon_import");
        infoForm.show(player).then(res => {
            if (res.canceled) return;
            if (res.category === recipeCat) {
                if (res.text === prevText) {
                    showBlockInfo(idx - 1, player);
                } else if (res.text === nextText) {
                    showBlockInfo(idx + 1, player);
                } else if (res.text === homeText) {
                    createMainCustomForm(player);
                }
            }
        });
    }
    customform.show(player).then(response => {
        if (response.canceled) return;
        // Обработка большой кнопки Back to book
        if ((response.category === parseRawtext({ "rawtext": [ { "translate": "bncbookFood" } ] }, playerLangs) || response.category === parseRawtext({ "rawtext": [ { "translate": "bncbookDrinks" } ] }, playerLangs)) && response.text && response.text.includes(parseRawtext({ "rawtext": [ { "translate": "Backtobook" } ] }, playerLangs))) {
            system.runTimeout(() => {
                showBook(player);
            }, 5);
            return;
        }
        if (response.category === parseRawtext({ "rawtext": [ { "translate": "bncbookFood" } ] }, playerLangs) && response.text) {
            // Сопоставляем по отображаемому имени
            const idx = foodDisplayNames.indexOf(response.text);
            if (idx !== -1 && foodInfos[idx]) {
                showFoodInfo(idx, player);
                return;
            }
        }
        if (response.category === parseRawtext({ "rawtext": [ { "translate": "bncbookDrinks" } ] }, playerLangs) && response.text) {
            // Сопоставляем по отображаемому имени напитка
            const idx = drinkDisplayNames.indexOf(response.text);
            if (idx !== -1 && blockInfos[idx]) {
                showBlockInfo(idx, player);
                return;
            }
        }
        // Обработка выбора языка прямо здесь
        const langCategory = parseRawtext({ "rawtext": [ { "translate": "bncbookLanguages" } ] }, playerLangs);
        if (response.category === langCategory && response.text) {
            // Определяем язык по выбранной подписи.
            // Подписи были добавлены как: "Русский", "English", "中文"
            let lang = 'en';
            if (response.text.includes('Русский')) {
                lang = 'ru';
            } else if (response.text.includes('中') || response.text.includes('中文')) {
                lang = 'zh';
            }
            player.setDynamicProperty('lang', lang);
            // После смены языка обновляем форму
            system.runTimeout(() => {
                createMainCustomForm(player);
            }, 5);
            return;
        }
        // Обычная обработка для других кнопок
        console.warn(`Selected the button "${response.text}" in the category "${response.category}"`);
    });
}

function showMainCustomForm(player) {
    createMainCustomForm(player);
}

// Обработчик для открытия книги по предмету
world.afterEvents.itemUse.subscribe((event) => {
    const { source, itemStack } = event;
    if (itemStack.typeId === "brewinandchewin:book") {
        showBook(source);
    }
});

// Объект переводов для разных языков
const translations = {
    ru: {
        "bncbook.recipesTitle": "Рецепты для кеги",
        "bncbook.Recipe": "Рецепт",
        "bncbookFood": "Еда",
        "bncbookDrinks": "Напитки",
        "bncbookLanguages": "Языки",
        "bncbook.selectLanguage": "Пожалуйста, выберите язык интерфейса:",
        "Food01": "Джерки",
        "Food02": "Кимчхи",
        "Food03": "Копчёная\nрыба",
        "Food04": "Солёные\nогурцы",
        "Food05": "Шоколадный\nфадж",
        "Food06": "Льняной сыр",
        "Food07": "Алый сыр",
        "Backtobook": "Назад в книгу",
        "bncbook.Home": "На главную",
        "bncbook.Next": "Далее",
        "bncbook.Previous": "Назад",
        "!Beer": "Пиво",
        "!Vodka": "Водка",
        "!Mead": "Медовуха",
        "!Rice Wine": "Рисовое\nвино",
        "!Pale Jane": "Тусклый\nджин",
        "!Egg Grog": "Яичный\nГрог",
        "Glittering\nGrenadine": "Сверкающий\nГренадин",
        "Saccharine\nRum": "Сахаристый\nром",
        "Salty Folly": "Соленая\nглупость",
        "Bloody\nMary": "Кровавая\nМэри",
        "Red Rum": "Красный\nром",
        "Strongroot\nAle": "Крепкий\nэль",
        "Steel\nToe Stout": "Стил-тае-стаут",
        "Dread Nog": "Ужасающий\nНог",
        "Withering\nDross": "Увядающий\сор",
        "repFood01": "Рецепт джерки",
        "repFood02": "Рецепт кимчхи",
        "repFood03": "Рецепт копчёной рыбы",
        "repFood04": "Рецепт солёных огурцов",
        "repFood05": "Рецепт шоколадного фаджа",
        "repFood06": "Рецепт льняного сыра",
        "repFood07": "Рецепт алого сыра",
        "repDrinks01": "Рецепт пива",
        "repDrinks02": "Рецепт водки",
        "repDrinks03": "Рецепт медовухи",
        "repDrinks04": "Рецепт рисового вина",
        "repDrinks05": "Рецепт тусклого джина",
        "repDrinks06": "Рецепт яичного грога",
        "repDrinks07": "Рецепт сверкающего гренадина",
        "repDrinks08": "Рецепт сахаристого рома",
        "repDrinks09": "Рецепт солёной глупости",
        "repDrinks10": "Рецепт кровавой Мэри",
        "repDrinks11": "Рецепт красного рома",
        "repDrinks12": "Рецепт крепкого эля",
        "repDrinks13": "Рецепт стил-тае-стаута",
        "repDrinks14": "Рецепт ужасающего нога",
        "repDrinks15": "Рецепт увядающего сора",
        "disFood01": "Слота от 1 до 4:\n*3 куска любого вида мяса из игры или Farmer's Delight\nСлот 5:\n*Должен быть пустым\nСлот 6:\n*Должен быть пустым, чтобы получить джерки\nСлот 7:\n*Должен быть пустым\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disFood02": "Слота от 1 до 4:\n*Водоросли(Обязательно)\n*Капуста или лист капусты(Обязательно)\n*Морковь, картофель, золотая морковь, свёкла, лук, помидор(вам можно выбрать только один овощ)\nСлот 5:\n*Должен быть пустым\nСлот 6:\n*Должен быть пустым, чтобы получить кимчхи\nСлот 7:\n*Должен быть пустым\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disFood03": "Слота от 1 до 4:\n*Сушеные водоросли(Обязательно)\n*2 любые рыбы из игры или Farmer's Delight, или из Crabber's Delight\nСлот 5:\n*Должен быть пустым\nСлот 6:\n*Должен быть пустым, чтобы получить копчёную рыбу\nСлот 7:\n*Должен быть пустым\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disFood04": "Слота от 1 до 4:\n*2 морских огурца\n*Светящиеся ягоды\nСлот 5:\n*Бутылка с мёдом\nСлот 6:\n*Должен быть пустым, чтобы получить солёные огурцы\nСлот 7:\n*Должен быть пустым\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disFood05": "Слота от 1 до 4:\n*2 какао-бобы\n*Сахар\nСлот 5:\n*2 бутылки молока\nСлот 6:\n*Должен быть пустым, чтобы получить шоколадный фадж\nСлот 7:\n*Должен быть пустым\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disFood06": "Слота от 1 до 4:\n*Коричненый гриб\n*Сахар\n*Семена тыквы\nСлот 5:\n*4 бутылки молока или 1 ведро молока\nСлот 6:\n*Должен быть пустым, чтобы получить льняной сыр\nСлот 7:\n*Медовые соты\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disFood07": "Слота от 1 до 4:\n*Багровый грибок\n*Сахар\n*Незерский нарост\nСлот 5:\n*4 бутылки молока или 1 ведро молока\nСлот 6:\n*Должен быть пустым, чтобы получить алый сыр\nСлот 7:\n*Медовые соты\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disDrinks01": "Слота от 1 до 4:\n*Пшеница\n*Семена пщеницы\n*Коричневый гриб\nСлот 5:\n*4 бутылки воды или 1 ведро воды\nСлот 6:\n*Должен быть пустым, чтобы получить пиво\nСлот 7:\n*Кружка\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disDrinks02": "Слота от 1 до 4:\n*Картофель\n*Пшеница\n*Семена пшеница\nСлот 5:\n*4 бутылки воды или 1 ведро воды\nСлот 6:\n*Должен быть пустым, чтобы получить водку\nСлот 7:\n*Кружка\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disDrinks03": "Слота от 1 до 4:\n*Сладкие ягоды\n*Пшеница\n*Семена пшеница\nСлот 5:\n*4 бутылки с мёдом\nСлот 6:\n*Должен быть пустым, чтобы получить медовуху\nСлот 7:\n*Кружка\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disDrinks04": "Слота от 1 до 4:\n*Рис\n*Коричневый гриб\nСлот 5:\n*4 бутылки воды или 1 ведро воды\nСлот 6:\n*Должен быть пустым, чтобы получить рисовое вино\nСлот 7:\n*Кружка\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disDrinks05": "Слота от 1 до 4:\n*Бутыль с мёдом\n*Сахар\n*Древесная кора\n*Ландыш\nСлот 5:\n*Рисовое вино\nСлот 6:\n*Должен быть пустым, чтобы получить тусклый джин\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks06": "Слота от 1 до 4:\n*Яйцо\n*Сахар\n*Капуста или лист капусты\nСлот 5:\n*4 бутылки молока или 1 ведро молока\nСлот 6:\n*Должен быть пустым, чтобы получить яичный грог\nСлот 7:\n*Кружка\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disDrinks07": "Слота от 1 до 4:\n*Светящиеся ягоды\n*Светящиеся пузырёк с чернилами\n*Светопыль\nСлот 5:\n*4 бутылки воды или 1 ведро воды\nСлот 6:\n*Должен быть пустым, чтобы получить сверкающий гренадин\nСлот 7:\n*Кружка\n\n: \n\n: 8 минут\n\n: 1 сфера",
        "disDrinks08": "Слота от 1 до 4:\n*Сладкие ягоды\n*Сахарный тростник\n*Арбуз\nСлот 5:\n*Медовуха\nСлот 6:\n*Должен быть пустым, чтобы получить сахаристый ром\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks09": "Слота от 1 до 4:\n*Морской огурец\n*Сушеные водоросли\n*Морская трава\nСлот 5:\n*Водка\nСлот 6:\n*Должен быть пустым, чтобы получить солёную глупость\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks10": "Слота от 1 до 4:\n*Помидор\n*Капуста или лист капусты\n*Сладкие ягоды\nСлот 5:\n*Водка\nСлот 6:\n*Должен быть пустым, чтобы получить кровавую Мэри\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks11": "Слота от 1 до 4:\n*Багровый грибок\n*Незерский нарост\n*Маринованный паучий глаз\n*Грибосвет\nСлот 5:\n*Кровавая Мэри\nСлот 6:\n*Должен быть пустым, чтобы получить красный ром\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks12": "Слота от 1 до 4:\n*Свёкла\n*Картофель\n*Коричневый гриб\n*Джерки\nСлот 5:\n*Пиво\nСлот 6:\n*Должен быть пустым, чтобы получить крепкий эль\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks13": "Слота от 1 до 4:\n*Железо\n*Багровый грибок\n*Незерский нарост\n*Пшеница\nСлот 5:\n*Крепкий эль\nСлот 6:\n*Должен быть пустым, чтобы получить стил-тае-стаут\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks14": "Слота от 1 до 4:\n*Зловещая бутылка\n*Яйцо черепахи\n*Маринованный паучий глаз\nСлот 5:\n*Яичный грог\nСлот 6:\n*Должен быть пустым, чтобы получить ужасающий ног\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 1 сфера",
        "disDrinks15": "Слота от 1 до 4:\n*Роза Визера\n*Пузырек с чернилами\n*Незерский нарост\n*Кость\nСлот 5:\n*Солёная глупость\nСлот 6:\n*Должен быть пустым, чтобы получить увядающий сор\nСлот 7:\n*Кружка\n\n: \n\n: 4 минут\n\n: 2 сферы"
    },
    en: {
        "bncbook.recipesTitle": "Recipes for kegs",
        "bncbook.Recipe": "Recipe",
        "bncbookFood": "Food",
        "bncbookDrinks": "Drinks",
        "bncbookLanguages": "Languages",
        "bncbook.selectLanguage": "Please select your language:",
        "Food01": "Jerky\n",
        "Food02": "Kimchi\n",
        "Food03": "Kippers\n",
        "Food04": "Pickled\nPickles",
        "Food05": "Cocoa\nFudge",
        "Food06": "Flaxen\nCheese",
        "Food07": "Scarlet\nCheese",
        "Backtobook": "Back\nto book",
        "bncbook.Home": "Home",
        "bncbook.Next": "Next",
        "bncbook.Previous": "Previous",
        "!Beer": "Beer\n",
        "!Vodka": "Vodka\n",
        "!Mead": "Mead\n",
        "!Rice Wine": "Rice Wine\n",
        "!Pale Jane": "Pale Jane\n",
        "!Egg Grog": "Egg Grog\n",
        "Glittering\nGrenadine": "Glittering\nGrenadine",
        "Saccharine\nRum": "Saccharine\nRum",
        "Salty Folly": "Salty\nFolly",
        "Bloody\nMary": "Bloody\nMary",
        "Red Rum": "Red Rum\n",
        "Strongroot\nAle": "Strongroot\nAle",
        "Steel\nToe Stout": "Steel\nToe Stout",
        "Dread Nog": "Dread Nog\n",
        "Withering\nDross": "Withering\nDross",
        "repFood01": "Jerky Recipe",
        "repFood02": "Kimchi Recipe",
        "repFood03": "Kippers Recipe",
        "repFood04": "Pickled Pickles Recipe",
        "repFood05": "Cocoa Fudge Recipe",
        "repFood06": "Flaxen Cheese Recipe",
        "repFood07": "Scarlet Cheese Recipe",
        "repDrinks01": "Beer Recipe",
        "repDrinks02": "Vodka Recipe",
        "repDrinks03": "Mead Recipe",
        "repDrinks04": "Rice Wine Recipe",
        "repDrinks05": "Pale Jane Recipe",
        "repDrinks06": "Egg Grog Recipe",
        "repDrinks07": "Glittering Grenadine Recipe",
        "repDrinks08": "Saccharine Rum Recipe",
        "repDrinks09": "Salty Folly Recipe",
        "repDrinks10": "Bloody Mary Recipe",
        "repDrinks11": "Red Rum Recipe",
        "repDrinks12": "Strongroot Ale Recipe",
        "repDrinks13": "Steel Toe Stout Recipe",
        "repDrinks14": "Dread Nog Recipe",
        "repDrinks15": "Withering Dross Recipe",
        "disFood01": "Slots 1-4:\n*3 pieces of any type of meat from the game or Farmer's Delight\nSlot 5:\n*Must be empty\nSlot 6:\n*Must be empty to get jerky\nSlot 7:\n*Must be empty\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disFood02": "Slots 1-4:\n*Seaweed (Required)\n*Cabbage or cabbage leaf (Required)\n*Carrot, potato, golden carrot, beetroot, onion, tomato (you can choose only one vegetable)\nSlot 5:\n*Must be empty\nSlot 6:\n*Must be empty to get kimchi\nSlot 7:\n*Must be empty\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disFood03": "Slots 1-4:\n*Dried seaweed (Required)\n*2 any fish from the game or Farmer's Delight, or Crabber's Delight\nSlot 5:\n*Must be empty\nSlot 6:\n*Must be empty to get kippers\nSlot 7:\n*Must be empty\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disFood04": "Slots 1-4:\n*2 sea pickle\n*Glow berries\nSlot 5:\n*Honey bottle\nSlot 6:\n*Must be empty to get pickled pickles\nSlot 7:\n*Must be empty\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disFood05": "Slots 1-4:\n*2 cocoa beans\n*Sugar\nSlot 5:\n*2 milk bottles\nSlot 6:\n*Must be empty to get cocoa fudge\nSlot 7:\n*Must be empty\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disFood06": "Slots 1-4:\n*Brown mushroom\n*Sugar\n*Pumpkin seeds\nSlot 5:\n*4 milk bottles or 1 milk bucket\nSlot 6:\n*Must be empty to get flaxen cheese\nSlot 7:\n*Honeycomb\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disFood07": "Slots 1-4:\n*Crimson fungus\n*Sugar\n*Nether wart\nSlot 5:\n*4 milk bottles or 1 milk bucket\nSlot 6:\n*Must be empty to get scarlet cheese\nSlot 7:\n*Honeycomb\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disDrinks01": "Slots 1-4:\n*Wheat\n*Wheat seeds\n*Brown mushroom\nSlot 5:\n*4 water bottles or 1 water bucket\nSlot 6:\n*Must be empty to get beer\nSlot 7:\n*Tankard\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disDrinks02": "Slots 1-4:\n*Potato\n*Wheat\n*Wheat seeds\nSlot 5:\n*4 water bottles or 1 water bucket\nSlot 6:\n*Must be empty to get vodka\nSlot 7:\n*Tankard\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disDrinks03": "Slots 1-4:\n*Sweet berries\n*Wheat\n*Wheat seeds\nSlot 5:\n*4 honey bottles\nSlot 6:\n*Must be empty to get mead\nSlot 7:\n*Tankard\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disDrinks04": "Slots 1-4:\n*Rice\n*Brown mushroom\nSlot 5:\n*4 water bottles or 1 water bucket\nSlot 6:\n*Must be empty to get rice wine\nSlot 7:\n*Tankard\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disDrinks05": "Slots 1-4:\n*Honey bottle\n*Sugar\n*Wooden bark\n*Lily of the Valley\nSlot 5:\n*Rice wine\nSlot 6:\n*Must be empty to get Pale Jane\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks06": "Slots 1-4:\n*Egg\n*Sugar\n*Cabbage or cabbage leaf\nSlot 5:\n*4 milk bottles or 1 milk bucket\nSlot 6:\n*Must be empty to get egg grog\nSlot 7:\n*Tankard\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disDrinks07": "Slots 1-4:\n*Glow berries\n*Glow ink sac\n*Glowstone dust\nSlot 5:\n*4 water bottles or 1 water bucket\nSlot 6:\n*Must be empty to get glittering grenadine\nSlot 7:\n*Tankard\n\n: \n\n: 8 minutes\n\n: 1 sphere",
        "disDrinks08": "Slots 1-4:\n*Sweet berries\n*Sugar cane\n*Melon\nSlot 5:\n*Mead\nSlot 6:\n*Must be empty to get saccharine rum\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks09": "Slots 1-4:\n*Sea pickle\n*Dried kelp\n*Seagrass\nSlot 5:\n*Vodka\nSlot 6:\n*Must be empty to get salty folly\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks10": "Slots 1-4:\n*Tomato\n*Cabbage or cabbage leaf\n*Sweet berries\nSlot 5:\n*Vodka\nSlot 6:\n*Must be empty to get bloody mary\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks11": "Slots 1-4:\n*Crimson fungus\n*Nether wart\n*Fermented spider eye\n*Shroomlight\nSlot 5:\n*Bloody Mary\nSlot 6:\n*Must be empty to get red rum\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks12": "Slots 1-4:\n*Beetroot\n*Potato\n*Brown mushroom\n*Jerky\nSlot 5:\n*Beer\nSlot 6:\n*Must be empty to get strong ale\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks13": "Slots 1-4:\n*Iron\n*Crimson fungus\n*Nether wart\n*Wheat\nSlot 5:\n*Strong Ale\nSlot 6:\n*Must be empty to get steel toe stout\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks14": "Slots 1-4:\n*Ominous bottle\n*Turtle egg\n*Fermented spider eye\nSlot 5:\n*Egg Grog\nSlot 6:\n*Must be empty to get dread nog\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 1 sphere",
        "disDrinks15": "Slots 1-4:\n*Wither Rose\n*Ink sac\n*Nether wart\n*Bone\nSlot 5:\n*Salty Folly\nSlot 6:\n*Must be empty to get withering dross\nSlot 7:\n*Tankard\n\n: \n\n: 4 minutes\n\n: 2 spheres"

    },
        zh: {
        "bncbook.recipesTitle": "酒桶配方",
        "bncbook.Recipe": "配方",
        "bncbookFood": "食物",
        "bncbookDrinks": "饮品",
        "bncbookLanguages": "语言",
        "bncbook.selectLanguage": "请选择界面语言:",
        "Food01": "肉干\n",
        "Food02": "泡菜\n",
        "Food03": "熏鱼\n",
        "Food04": "腌黄瓜",
        "Food05": "可可软糖",
        "Food06": "亚麻奶酪",
        "Food07": "猩红奶酪",
        "Backtobook": "返回\n书本",
        "bncbook.Home": "首页",
        "bncbook.Next": "下一页",
        "bncbook.Previous": "上一页",
        "!Beer": "啤酒\n",
        "!Vodka": "伏特加\n",
        "!Mead": "蜂蜜酒\n",
        "!Rice Wine": "米酒\n",
        "!Pale Jane": "苍白琴酒\n",
        "!Egg Grog": "蛋格罗格\n",
        "Glittering\nGrenadine": "闪亮石榴汁",
        "Saccharine\nRum": "糖浆朗姆酒",
        "Salty Folly": "咸味愚行",
        "Bloody\nMary": "血腥玛丽",
        "Red Rum": "红朗姆酒\n",
        "Strongroot\nAle": "强根麦酒",
        "Steel\nToe Stout": "钢趾黑啤酒",
        "Dread Nog": "恐惧蛋奶酒\n",
        "Withering\nDross": "凋零渣滓",
        "repFood01": "肉干配方",
        "repFood02": "泡菜配方",
        "repFood03": "熏鱼配方",
        "repFood04": "腌黄瓜配方",
        "repFood05": "可可软糖配方",
        "repFood06": "亚麻奶酪配方",
        "repFood07": "猩红奶酪配方",
        "repDrinks01": "啤酒配方",
        "repDrinks02": "伏特加配方",
        "repDrinks03": "蜂蜜酒配方",
        "repDrinks04": "米酒配方",
        "repDrinks05": "苍白琴酒配方",
        "repDrinks06": "蛋格罗格配方",
        "repDrinks07": "闪亮石榴汁配方",
        "repDrinks08": "糖浆朗姆酒配方",
        "repDrinks09": "咸味愚行配方",
        "repDrinks10": "血腥玛丽配方",
        "repDrinks11": "红朗姆酒配方",
        "repDrinks12": "强根麦酒配方",
        "repDrinks13": "钢趾黑啤酒配方",
        "repDrinks14": "恐惧蛋奶酒配方",
        "repDrinks15": "凋零渣滓配方",
        "disFood01": "槽位1-4:\n*3块游戏或农夫乐事中的任意肉类\n槽位5:\n*必须为空\n槽位6:\n*必须为空以获得肉干\n槽位7:\n*必须为空\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disFood02": "槽位1-4:\n*海带(必需)\n*卷心菜或卷心菜叶(必需)\n*胡萝卜、土豆、金胡萝卜、甜菜根、洋葱、番茄(只能选择一种蔬菜)\n槽位5:\n*必须为空\n槽位6:\n*必须为空以获得泡菜\n槽位7:\n*必须为空\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disFood03": "槽位1-4:\n*干海带(必需)\n*2条游戏、农夫乐事或螃蟹乐事中的任意鱼类\n槽位5:\n*必须为空\n槽位6:\n*必须为空以获得熏鱼\n槽位7:\n*必须为空\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disFood04": "槽位1-4:\n*2个海泡菜\n*发光浆果\n槽位5:\n*蜂蜜瓶\n槽位6:\n*必须为空以获得腌黄瓜\n槽位7:\n*必须为空\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disFood05": "槽位1-4:\n*2个可可豆\n*糖\n槽位5:\n*2瓶牛奶\n槽位6:\n*必须为空以获得可可软糖\n槽位7:\n*必须为空\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disFood06": "槽位1-4:\n*棕色蘑菇\n*糖\n*南瓜种子\n槽位5:\n*4瓶牛奶或1桶牛奶\n槽位6:\n*必须为空以获得亚麻奶酪\n槽位7:\n*蜜脾\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disFood07": "槽位1-4:\n*绯红菌\n*糖\n*下界疣\n槽位5:\n*4瓶牛奶或1桶牛奶\n槽位6:\n*必须为空以获得猩红奶酪\n槽位7:\n*蜜脾\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disDrinks01": "槽位1-4:\n*小麦\n*小麦种子\n*棕色蘑菇\n槽位5:\n*4瓶水或1桶水\n槽位6:\n*必须为空以获得啤酒\n槽位7:\n*啤酒杯\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disDrinks02": "槽位1-4:\n*土豆\n*小麦\n*小麦种子\n槽位5:\n*4瓶水或1桶水\n槽位6:\n*必须为空以获得伏特加\n槽位7:\n*啤酒杯\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disDrinks03": "槽位1-4:\n*甜浆果\n*小麦\n*小麦种子\n槽位5:\n*4瓶蜂蜜\n槽位6:\n*必须为空以获得蜂蜜酒\n槽位7:\n*啤酒杯\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disDrinks04": "槽位1-4:\n*稻米\n*棕色蘑菇\n槽位5:\n*4瓶水或1桶水\n槽位6:\n*必须为空以获得米酒\n槽位7:\n*啤酒杯\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disDrinks05": "槽位1-4:\n*蜂蜜瓶\n*糖\n*树皮\n*铃兰\n槽位5:\n*米酒\n槽位6:\n*必须为空以获得苍白琴酒\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks06": "槽位1-4:\n*鸡蛋\n*糖\n*卷心菜或卷心菜叶\n槽位5:\n*4瓶牛奶或1桶牛奶\n槽位6:\n*必须为空以获得蛋格罗格\n槽位7:\n*啤酒杯\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disDrinks07": "槽位1-4:\n*发光浆果\n*发光墨囊\n*荧石粉\n槽位5:\n*4瓶水或1桶水\n槽位6:\n*必须为空以获得闪亮石榴汁\n槽位7:\n*啤酒杯\n\n: \n\n: 8分钟\n\n: 1个经验球",
        "disDrinks08": "槽位1-4:\n*甜浆果\n*甘蔗\n*西瓜\n槽位5:\n*蜂蜜酒\n槽位6:\n*必须为空以获得糖浆朗姆酒\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks09": "槽位1-4:\n*海泡菜\n*干海带\n*海草\n槽位5:\n*伏特加\n槽位6:\n*必须为空以获得咸味愚行\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks10": "槽位1-4:\n*番茄\n*卷心菜或卷心菜叶\n*甜浆果\n槽位5:\n*伏特加\n槽位6:\n*必须为空以获得血腥玛丽\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks11": "槽位1-4:\n*绯红菌\n*下界疣\n*发酵蜘蛛眼\n*菌光体\n槽位5:\n*血腥玛丽\n槽位6:\n*必须为空以获得红朗姆酒\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks12": "槽位1-4:\n*甜菜根\n*土豆\n*棕色蘑菇\n*肉干\n槽位5:\n*啤酒\n槽位6:\n*必须为空以获得强根麦酒\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks13": "槽位1-4:\n*铁\n*绯红菌\n*下界疣\n*小麦\n槽位5:\n*强根麦酒\n槽位6:\n*必须为空以获得钢趾黑啤酒\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks14": "槽位1-4:\n*不祥之瓶\n*海龟蛋\n*发酵蜘蛛眼\n槽位5:\n*蛋格罗格\n槽位6:\n*必须为空以获得恐惧蛋奶酒\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 1个经验球",
        "disDrinks15": "槽位1-4:\n*凋零玫瑰\n*墨囊\n*下界疣\n*骨头\n槽位5:\n*咸味愚行\n槽位6:\n*必须为空以获得凋零渣滓\n槽位7:\n*啤酒杯\n\n: \n\n: 4分钟\n\n: 2个经验球"
    }
};

// Функция для получения языка игрока
function getPlayerLang(player) {
    return player.getDynamicProperty('lang') || 'en';
}

// Функция для обработки rawtext и translate с поддержкой языка
function parseRawtext(raw, langs = ["ru", "en", "zh"]) {
    if (typeof raw === "string") return raw;
    if (raw && raw.rawtext && Array.isArray(raw.rawtext)) {
        return raw.rawtext.map(part => {
            if (part.translate) {
                for (let lang of langs) {
                    if (translations[lang] && translations[lang][part.translate]) {
                        return translations[lang][part.translate];
                    }
                }
                return part.translate;
            }
            if (part.text) {
                return part.text;
            }
            return "";
        }).join("");
    }
    return "";
}