// widgets/rgpd_banner/widget_rgpd_banner.js
(function() {
    'use strict';

    const COOKIE_NAME_RGPD = 'rgpd_banner_accepted';
    const COOKIE_EXPIRY_DAYS_RGPD = 365; // Cookie valide 1 an

    function initializeRgpdBannerWidget(widgetElement) {
        const widgetId = widgetElement.id;
        if (widgetElement.dataset.rgpdInitialized === 'true') return;
        widgetElement.dataset.rgpdInitialized = 'true';
        // console.log(`[RGPD Banner JS] Initialisation widget: #${widgetId}`);

        const acceptButton = widgetElement.querySelector(`#${widgetId}-accept-btn`);
        if (!acceptButton) { console.error(`[RGPD Banner JS #${widgetId}] Bouton Accepter non trouvé.`); return; }

        // --- Fonctions Cookie (locales ou globales) ---
        const setCookieRgpd = (typeof setCookie === 'function') ? setCookie : function(name, value, days) {
            let expires = "";
            if (days) {
                const date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                expires = "; expires=" + date.toUTCString();
            }
            const secureFlag = window.location.protocol === 'https:' ? '; Secure' : '';
            document.cookie = name + "=" + (value || "")  + expires + "; path=/; SameSite=Lax" + secureFlag;
            console.log(`[RGPD Banner JS #${widgetId}] Cookie Set (local fallback): ${name}=${value}`);
        };

        const getCookieRgpd = (typeof getCookie === 'function') ? getCookie : function(name) {
            const nameEQ = name + "=";
            const ca = document.cookie.split(';');
            for(let i = 0; i < ca.length; i++) {
                let c = ca[i];
                while (c.charAt(0) === ' ') c = c.substring(1, c.length);
                if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
            }
            return null;
        };
        // --- Fin Fonctions Cookie ---

        function hideBanner() {
            widgetElement.classList.remove('rgpd-banner-visible');
            widgetElement.addEventListener('transitionend', function onEnd() {
                if (!widgetElement.classList.contains('rgpd-banner-visible')) {
                    widgetElement.style.display = 'none';
                }
                widgetElement.removeEventListener('transitionend', onEnd);
            }, { once: true });
            setTimeout(() => {
                 if (!widgetElement.classList.contains('rgpd-banner-visible')) {
                     widgetElement.style.display = 'none';
                 }
             }, 600);
            // console.log(`[RGPD Banner JS #${widgetId}] Masqué.`);
        }

        acceptButton.addEventListener('click', function() {
            // console.log(`[RGPD Banner JS #${widgetId}] Bouton Accepter cliqué.`);
            setCookieRgpd(COOKIE_NAME_RGPD, 'true', COOKIE_EXPIRY_DAYS_RGPD);
            hideBanner();
        });

        function displayBannerIfNeeded() {
            if (getCookieRgpd(COOKIE_NAME_RGPD) !== 'true') {
                // console.log(`[RGPD Banner JS #${widgetId}] Cookie non trouvé. Affichage du bandeau.`);
                widgetElement.style.display = 'block';
                void widgetElement.offsetWidth;
                widgetElement.classList.add('rgpd-banner-visible');
            } else {
                // console.log(`[RGPD Banner JS #${widgetId}] Cookie trouvé. Bandeau non affiché.`);
                widgetElement.style.display = 'none';
            }
        }

        const introOverlayWidget = document.querySelector('.widget-intro-overlay');
        if (introOverlayWidget && getComputedStyle(introOverlayWidget).display !== 'none') {
            // console.log(`[RGPD Banner JS #${widgetId}] Intro Overlay détecté. Attente de l'événement 'introOverlay:finishedAndVisible'.`);
            document.addEventListener('introOverlay:finishedAndVisible', function handleIntroFinish() {
                // console.log(`[RGPD Banner JS #${widgetId}] Événement 'introOverlay:finishedAndVisible' reçu. Affichage conditionnel du bandeau.`);
                displayBannerIfNeeded();
                document.removeEventListener('introOverlay:finishedAndVisible', handleIntroFinish);
            }, { once: true });
        } else {
            // console.log(`[RGPD Banner JS #${widgetId}] Pas d'Intro Overlay détecté ou déjà terminé. Affichage conditionnel immédiat.`);
            displayBannerIfNeeded();
        }
    }

    function initAllRgpdBanners() {
        document.querySelectorAll('.widget-rgpd-banner:not([data-rgpd-initialized="true"])').forEach(widgetEl => {
            initializeRgpdBannerWidget(widgetEl);
        });
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', initAllRgpdBanners);
    } else {
        initAllRgpdBanners();
    }

    document.addEventListener('base_widget:loaded', function(event) {
        if (event.detail && event.detail.widgetElement && event.detail.widgetName === 'rgpd_banner') {
            const widgetElementToInit = event.detail.widgetElement.matches('.widget-rgpd-banner')
                ? event.detail.widgetElement
                : event.detail.widgetElement.querySelector('.widget-rgpd-banner');
            if (widgetElementToInit && widgetElementToInit.dataset.rgpdInitialized !== 'true') {
                initializeRgpdBannerWidget(widgetElementToInit);
            }
        }
    });

    // console.log('[RGPD Banner JS] Script global chargé et prêt.');

})();