{#
    Cookie consent banner + preferences modal.
    Backed by orestbida/cookieconsent v3 (https://github.com/orestbida/cookieconsent),
    loaded from jsdelivr — pinned to a specific tag for reproducibility.

    Usage (anywhere before `</body>`):
        {% include 'partials/cookie-consent.twig' %}

    Catégories déclarées :
      - `necessary`  : cookies strictement nécessaires (session web,
                       CSRF, choix de consentement lui-même). Toujours
                       activée, non décochable. Légalement on n'a PAS
                       BESOIN du consentement pour ceux-là — la banner
                       l'affiche uniquement pour information.
      - `analytics`  : préparée pour un futur Google Analytics / Matomo.
                       Aucun script n'est injecté pour l'instant ; le
                       hook `services.analytics.onAccept` est le seul
                       point à étoffer le jour où on en ajoute un.

    Internationalisation : les chaînes visibles sont lues depuis
    `resources/lang/<locale>/cookies.php` (catalogue racine `cookies.*`,
    partagé entre toutes les pages — ce ne sont pas des chaînes de page).

    Lien de réouverture : tout élément avec `data-cc="show-preferencesModal"`
    rouvre la modale (ex. lien dans le footer / page Confidentialité).
#}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orestbida/cookieconsent@v3.0.1/dist/cookieconsent.css">
<script defer src="https://cdn.jsdelivr.net/gh/orestbida/cookieconsent@v3.0.1/dist/cookieconsent.umd.js"></script>

{# --- Google Analytics 4 (gated by the `analytics` category) -----------------
   Both <script> tags ship as `type="text/plain"` so the browser does
   NOT execute them at parse time. CookieConsent v3 watches for elements
   carrying `data-category="analytics"`; once the visitor accepts that
   category it rewrites the type to `text/javascript` and the snippet
   runs. Reject / no decision = GA never loads, no cookies, no hits. #}
{% if google_analytics_id %}
    <script type="text/plain"
            data-category="analytics"
            async
            src="https://www.googletagmanager.com/gtag/js?id={{ google_analytics_id }}"></script>
    <script type="text/plain" data-category="analytics">
        window.dataLayer = window.dataLayer || [];
        function gtag(){ dataLayer.push(arguments); }
        gtag('js', new Date());
        gtag('config', {{ google_analytics_id|json_encode|raw }}, {
            anonymize_ip: true
        });
    </script>
{% endif %}

{# Construit côté serveur l'objet de translations dans la locale active
   pour le passer au JS. On évite d'expédier les deux locales — la
   re-render server-side coûte 0 et économise du JSON. #}
{% set cc_locale = locale|default('fr-FR') %}
{% set cc_translations = {
    (cc_locale): {
        consentModal: {
            title:           trans('cookies.consent.title'),
            description:     trans('cookies.consent.description'),
            acceptAllBtn:    trans('cookies.consent.acceptAll'),
            acceptNecessaryBtn: trans('cookies.consent.acceptNecessary'),
            showPreferencesBtn: trans('cookies.consent.showPreferences')
        },
        preferencesModal: {
            title:             trans('cookies.preferences.title'),
            acceptAllBtn:      trans('cookies.consent.acceptAll'),
            acceptNecessaryBtn:trans('cookies.consent.acceptNecessary'),
            savePreferencesBtn:trans('cookies.preferences.save'),
            closeIconLabel:    trans('cookies.preferences.close'),
            sections: [
                {
                    title:       trans('cookies.preferences.intro.title'),
                    description: trans('cookies.preferences.intro.description')
                },
                {
                    title:       trans('cookies.categories.necessary.title'),
                    description: trans('cookies.categories.necessary.description'),
                    linkedCategory: 'necessary'
                },
                {
                    title:       trans('cookies.categories.analytics.title'),
                    description: trans('cookies.categories.analytics.description'),
                    linkedCategory: 'analytics'
                }
            ]
        }
    }
} %}

<script>
    window.addEventListener('DOMContentLoaded', function () {
        if (typeof CookieConsent === 'undefined') { return; }

        CookieConsent.run({
            // Layout: light, top-right banner + center modal — sober defaults.
            guiOptions: {
                consentModal: {
                    layout:    'box',
                    position:  'bottom right',
                    equalWeightButtons: true,
                    flipButtons: false
                },
                preferencesModal: {
                    layout:    'box',
                    position:  'right',
                    equalWeightButtons: true,
                    flipButtons: false
                }
            },
            // Politique de réémission : tout changement de version
            // ré-affiche la banner aux visiteurs qui avaient déjà répondu.
            // Bumper ce numéro quand on ajoute / retire une catégorie.
            revision: 1,
            categories: {
                necessary: {
                    enabled:  true,
                    readOnly: true
                },
                analytics: {}
            },
            language: {
                default: {{ cc_locale|json_encode|raw }},
                translations: {{ cc_translations|json_encode|raw }}
            }
        });
    });
</script>
