// attaches listeners to the txt2img and img2img galleries to update displayed generation param text when the image changes

let txt2img_gallery,
    img2img_gallery,
    modal = undefined;
onAfterUiUpdate(function () {
    if (!txt2img_gallery) {
        txt2img_gallery = attachGalleryListeners("txt2img");
    }
    if (!img2img_gallery) {
        img2img_gallery = attachGalleryListeners("img2img");
    }
    if (!modal) {
        modal = gradioApp().getElementById("lightboxModal");
        modalObserver.observe(modal, {
            attributes: true,
            attributeFilter: ["style"],
        });
    }
});

let modalObserver = new MutationObserver(function (mutations) {
    mutations.forEach(function (mutationRecord) {
        let selectedTab = gradioApp().querySelector(
            "#tabs div button.selected",
        )?.innerText;
        if (
            mutationRecord.target.style.display === "none" &&
            (selectedTab === "txt2img" || selectedTab === "img2img")
        ) {
            gradioApp()
                .getElementById(selectedTab + "_generation_info_button")
                ?.click();
        }
    });
});

function attachGalleryListeners(tab_name) {
    let gallery = gradioApp().querySelector("#" + tab_name + "_gallery");
    gallery?.addEventListener("click", () =>
        gradioApp()
            .getElementById(tab_name + "_generation_info_button")
            .click(),
    );
    gallery?.addEventListener("keydown", (e) => {
        if (e.keyCode == 37 || e.keyCode == 39) {
            // left or right arrow
            gradioApp()
                .getElementById(tab_name + "_generation_info_button")
                .click();
        }
    });
    return gallery;
}
