/**
 * Projet                    : MageStock
 * Logiciel                  : MageStock
 * Fichier                   : assets/js/auth-gateway.js
 * Rôle                      : Comportements partagés des pages publiques de connexion et récupération.
 * Auteur                    : Régis KREMER
 * Version du fichier        : 1.0.0
 * Version générale          : 2.6.119
 * Lot                       : MAGESTOCK CONNEXION RECUPERATION JETON ADMIN1
 * Base requise              : MageStock 2.6.118
 * Création                  : 2026-07-25
 * Dernière modification     : 2026-07-25
 * Dépendances               : MageStockRuntime, i18n.js
 * Données touchées          : cookie sm_theme et cookie sm_lang uniquement
 * Permissions               : aucune
 * Sécurité                  : aucun secret conservé dans localStorage ou sessionStorage
 * Compatibilité             : navigateurs modernes
 *
 * Résumé :
 * - Gère le thème, la langue et l’affichage temporaire des mots de passe.
 *
 * Historique :
 * - 2.6.119 — Création des comportements de la passerelle publique.
 */
(function authGatewayBootstrap(){
    'use strict';

    const root = document.documentElement;
    const themeButton = document.getElementById('authThemeToggle');
    const themeIcon = document.getElementById('authThemeIcon');
    const languageSelect = document.getElementById('authLanguageSelect');
    const lightLabel = document.body?.dataset.themeLightLabel || 'Passer en thème clair';
    const darkLabel = document.body?.dataset.themeDarkLabel || 'Passer en thème sombre';

    function getCookie(name){
        const match = document.cookie.match(new RegExp('(?:^|; )' + name.replace(/[.$?*|{}()[\]\\/+^]/g, '\\$&') + '=([^;]*)'));
        return match ? decodeURIComponent(match[1]) : '';
    }

    function setCookie(name, value){
        const cookiePath = window.MageStockRuntime?.cookiePath || '/';
        const secure = location.protocol === 'https:' ? ';Secure' : '';
        document.cookie = `${name}=${encodeURIComponent(value)};path=${cookiePath};max-age=31536000;SameSite=Lax${secure}`;
    }

    function sunIcon(){
        return '<circle cx="12" cy="12" r="4"></circle><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41"></path>';
    }

    function moonIcon(){
        return '<path d="M21 12.4A7.5 7.5 0 0 1 11.6 3a6.8 6.8 0 1 0 9.4 9.4Z"></path>';
    }

    function applyTheme(theme){
        const normalized = theme === 'light' ? 'light' : 'dark';
        root.setAttribute('data-theme', normalized);
        const meta = document.querySelector('meta[name="theme-color"]');
        if(meta) meta.setAttribute('content', normalized === 'light' ? '#ffffff' : '#0b1320');
        if(themeIcon) themeIcon.innerHTML = normalized === 'light' ? moonIcon() : sunIcon();
        const label = normalized === 'light' ? darkLabel : lightLabel;
        if(themeButton){
            themeButton.title = label;
            themeButton.setAttribute('aria-label', label);
        }
    }

    let theme = getCookie('sm_theme') || 'dark';
    applyTheme(theme);
    themeButton?.addEventListener('click', () => {
        theme = theme === 'dark' ? 'light' : 'dark';
        setCookie('sm_theme', theme);
        applyTheme(theme);
    });

    languageSelect?.addEventListener('change', async () => {
        const language = languageSelect.value;
        setCookie('sm_lang', language);
        if(typeof window.setLang === 'function'){
            try { await window.setLang(language); } catch (_) { location.reload(); }
        } else {
            location.reload();
        }
    });

    document.querySelectorAll('[data-password-toggle]').forEach((button) => {
        const targetId = button.getAttribute('data-password-toggle');
        const input = targetId ? document.getElementById(targetId) : null;
        if(!input) return;
        button.addEventListener('click', () => {
            const visible = input.type === 'text';
            input.type = visible ? 'password' : 'text';
            button.setAttribute('aria-pressed', visible ? 'false' : 'true');
            button.innerHTML = visible
                ? '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6S2 12 2 12Z"></path><circle cx="12" cy="12" r="2.5"></circle></svg>'
                : '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3 3l18 18"></path><path d="M10.6 6.2A10.8 10.8 0 0 1 12 6c6.5 0 10 6 10 6a17 17 0 0 1-2.1 2.8"></path><path d="M6.2 6.2C3.5 8 2 12 2 12s3.5 6 10 6a10.7 10.7 0 0 0 4.2-.8"></path></svg>';
            input.focus({preventScroll:true});
        });
    });
})();
