// source --> https://zuzanakrausova.sk/wp-content/plugins/toret-srovnavace-zbozi/public/assets/js/public.js?ver=1.17.0 
jQuery(document).ready(function ($) {

    $( ".cmplz-accept" ).on( "click", function() {

        let data = {
            action: 'tsz_ret_data',
        };

        jQuery.post(tsz_public_localize.ajaxurl, data, function (response, b) {

            let as = JSON.parse(response);
            let pageType = as['pageType'];

            let retargetingConf = {
                rtgId: as['rtgId'],
                consent: 1,
            };

            if(pageType === 'category'){
                retargetingConf.category = as['category'];
                retargetingConf.pageType = 'category';
            }else if (pageType === 'offerdetail'){
                retargetingConf.itemId = as['itemId'];
                retargetingConf.pageType = 'offerdetail';
            }

            window.rc.retargetingHit(retargetingConf);
        });

    });


    if( $('#tab-title-tsaz_custom_tab').length > 0){
        let text = $('#tab-title-tsaz_custom_tab').children().first().html();
        let count = $('.heureka-shop-review-wrap').length
        $('#tab-title-tsaz_custom_tab').children().first().html(text + ' (' + count + ')')
    }

});


/**
 * SLIDER
 */
jQuery(document).ready(function($) {

    function getResponsiveItemsPerView(sliderContainer) {
        const responsiveSettingsAttr = sliderContainer.attr('data-responsive');
        const defaultItemsPerView = parseInt(sliderContainer.attr('data-items-per-view'), 10) || 1;

        if (!responsiveSettingsAttr) {
            return defaultItemsPerView;
        }

        try {
            const responsiveSettings = JSON.parse(responsiveSettingsAttr);
            if (!Array.isArray(responsiveSettings) || responsiveSettings.length === 0) {
                return defaultItemsPerView;
            }

            // Seřadit breakpointy od největšího po nejmenší pro správnou logiku
            responsiveSettings.sort((a, b) => (parseInt(b.breakpoint, 10) || 0) - (parseInt(a.breakpoint, 10) || 0));

            const windowWidth = $(window).width();

            for (const setting of responsiveSettings) {
                const breakpointVal = parseInt(setting.breakpoint, 10);
                const itemsVal = parseInt(setting.items, 10);

                if (isNaN(breakpointVal) || isNaN(itemsVal) || itemsVal <= 0) {
                    console.warn("Invalid breakpoint or items in responsive settings:", setting);
                    continue; // Přeskočit neplatné nastavení
                }

                if (windowWidth >= breakpointVal) {
                    return itemsVal;
                }
            }
            // Pokud žádný breakpoint neodpovídá (např. okno je menší než nejmenší definovaný breakpoint > 0)
            // vrátit items z posledního (nejmenšího) breakpointu, pokud je definován breakpoint 0.
            // Nebo fallback na default.
            const smallestBreakpointSetting = responsiveSettings[responsiveSettings.length - 1];
            if (smallestBreakpointSetting && !isNaN(parseInt(smallestBreakpointSetting.items, 10)) && parseInt(smallestBreakpointSetting.items, 10) > 0) {
                return parseInt(smallestBreakpointSetting.items, 10);
            }


        } catch (e) {
            console.error("Error parsing responsive settings for slider:", e, responsiveSettingsAttr);
        }
        return defaultItemsPerView;
    }

    function initReviewSlider(sliderContainerElem) {
        const sliderContainer = $(sliderContainerElem);

        // Odebrání starých listenerů, aby se neduplikovaly při reinicializaci
        const prevButton = sliderContainer.find('.tsz-prev').off('click.sliderApi');
        const nextButton = sliderContainer.find('.tsz-next').off('click.sliderApi');
        const dotsContainer = sliderContainer.find('.tsz-slider-dots').off('click.sliderApi', '.tsz-dot');

        const slidesViewport = sliderContainer.find('.tsz-slides-viewport');
        const slidesWrapper = sliderContainer.find('.tsz-slides');
        const slides = slidesWrapper.find('.tsz-review-slide');
        const totalSlides = slides.length;

        // Získání aktuálního počtu položek na základě responzivních pravidel
        let itemsPerView = getResponsiveItemsPerView(sliderContainer);
        let currentStoredPage = sliderContainer.data('currentPage') || 0;

        if (totalSlides === 0) {
            sliderContainer.hide();
            return;
        } else {
            sliderContainer.show(); // Zobrazit, pokud byl skryt
        }

        // Pokud je méně slidů než itemsPerView, zobrazíme všechny a skryjeme navigaci
        if (totalSlides <= itemsPerView) {
            itemsPerView = totalSlides; // Zobraz všechny dostupné slidy
            prevButton.hide().addClass('hidden-by-js');
            nextButton.hide().addClass('hidden-by-js');
            if (dotsContainer.length) dotsContainer.hide().addClass('hidden-by-js');

            const slideWidthPercentageAll = (100 / itemsPerView);
            slides.css({
                'flex-basis': `${slideWidthPercentageAll}%`,
                'width': `${slideWidthPercentageAll}%`
            });
            slidesWrapper.css('transform', 'translateX(0%)');
            sliderContainer.data('currentPage', 0); // Jsme vždy na první (a jediné) stránce
            return; // Dále není potřeba nastavovat sliderovou logiku
        } else {
            // Ujistit se, že tlačítka/tečky jsou viditelné, pokud byly dříve skryty
            if (prevButton.hasClass('hidden-by-js')) prevButton.show().removeClass('hidden-by-js');
            if (nextButton.hasClass('hidden-by-js')) nextButton.show().removeClass('hidden-by-js');
            if (dotsContainer.length && dotsContainer.hasClass('hidden-by-js')) {
                dotsContainer.show().removeClass('hidden-by-js');
            }
        }

        const slideWidthPercentage = (100 / itemsPerView);
        slides.css({
            'flex-basis': `${slideWidthPercentage}%`,
            'width': `${slideWidthPercentage}%`
        });

        const totalPages = Math.ceil(totalSlides / itemsPerView);
        let currentPage = Math.min(currentStoredPage, totalPages - 1); // Udržet stránku, pokud je platná
        currentPage = Math.max(0, currentPage); // Zajistit, že není < 0

        // Generování teček
        if (totalPages > 1 && dotsContainer.length) {
            dotsContainer.empty().show(); // Ukázat kontejner, pokud byl skryt
            for (let i = 0; i < totalPages; i++) {
                $('<span></span>')
                    .addClass('tsz-dot' + (i === currentPage ? ' active' : ''))
                    .attr('data-page-index', i)
                    .appendTo(dotsContainer);
            }
        } else if (dotsContainer.length) {
            dotsContainer.empty().hide(); // Skrýt, pokud není potřeba
        }
        const dots = dotsContainer.find('.tsz-dot');

        function goToPage(pageIndex) {
            if (pageIndex < 0) pageIndex = 0;
            if (pageIndex >= totalPages) pageIndex = totalPages - 1;

            const offsetPercentage = - (pageIndex * 100); // Posun je vždy o 100% šířky viewportu na stránku
            slidesWrapper.css('transform', `translateX(${offsetPercentage}%)`);
            currentPage = pageIndex;
            sliderContainer.data('currentPage', currentPage); // Uložit aktuální stránku

            if (dots.length > 0) {
                dots.removeClass('active').eq(currentPage).addClass('active');
            }

            // Ovládání viditelnosti a stavu tlačítek prev/next
            prevButton.prop('disabled', currentPage === 0).toggle(totalPages > 1);
            nextButton.prop('disabled', currentPage === totalPages - 1).toggle(totalPages > 1);
        }

        // Připojení eventů s namespacem pro snadné odebrání
        nextButton.on('click.sliderApi', function () {
            // Načíst aktuální data, protože se mohla změnit od navázání listeneru
            let currentItems = getResponsiveItemsPerView(sliderContainer);
            let currentTotalPages = Math.ceil(totalSlides / currentItems);
            let storedPage = sliderContainer.data('currentPage') || 0;
            if (storedPage < currentTotalPages - 1) {
                goToPage(storedPage + 1);
            }
        });

        prevButton.on('click.sliderApi', function () {
            let storedPage = sliderContainer.data('currentPage') || 0;
            if (storedPage > 0) {
                goToPage(storedPage - 1);
            }
        });

        dotsContainer.on('click.sliderApi', '.tsz-dot', function () {
            const pageIndex = $(this).data('page-index');
            if (typeof pageIndex !== 'undefined') {
                goToPage(parseInt(pageIndex, 10));
            }
        });

        // Inicializace - zobrazit správnou stránku
        goToPage(currentPage);
    }

    $('.tsz-review-slider-container').each(function() {
        initReviewSlider(this);
    });

    function debounce(func, wait, immediate) {
        var timeout;
        return function () {
            var context = this, args = arguments;
            var later = function () {
                timeout = null;
                if (!immediate) func.apply(context, args);
            };
            var callNow = immediate && !timeout;
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
            if (callNow) func.apply(context, args);
        };
    }

    const debouncedResizeHandler = debounce(function () {
        $('.tsz-review-slider-container').each(function () {
            initReviewSlider(this); // Znovu inicializovat/aktualizovat slider
        });
    }, 250); // 250ms prodleva

    $(window).on('resize.sliderEvents', debouncedResizeHandler);


});

document.addEventListener('DOMContentLoaded', function() {

    const readMoreLinks = document.querySelectorAll('.tsz-read-more');

    readMoreLinks.forEach(link => {
        link.addEventListener('click', function(event) {
            event.preventDefault();

            const wrapper = this.closest('.tsz-review-text-wrapper');
            if (!wrapper) {
                return;
            }

            const textBody = wrapper.querySelector('.tsz-review-text-body');
            if (!textBody) {
                return;
            }

            textBody.classList.toggle('expanded');

            if (textBody.classList.contains('expanded')) {
                this.textContent = this.dataset.lessText || 'Skrýt';
            } else {
                this.textContent = this.dataset.moreText || 'Číst více';
            }
        });
    });

});