/**
 * Téléchargement de fichiers (PDF/CSV) en mode web app installée (PWA standalone).
 *
 * Intention : dans une web app iOS ajoutée à l'écran d'accueil, un lien vers un
 * fichier du même domaine s'ouvre dans la vue courante SANS aucun bouton retour
 * (iOS ignore target=_blank pour les liens du périmètre de l'app) : l'utilisateur
 * reste coincé sur le fichier. On intercepte donc le clic et on ouvre la feuille
 * de partage native (Enregistrer dans Fichiers, Imprimer, Mail, AirDrop...),
 * qui ne quitte jamais l'app.
 *
 * Deux modes de préchargement (iOS n'autorise navigator.share() que pendant le
 * geste utilisateur, le blob doit donc déjà être prêt — ou presque — au clic) :
 *
 * - Par défaut : le fichier est préchargé dès l'affichage du bouton. Adapté aux
 *   pages qui n'affichent qu'un ou deux liens (confirmation de commande).
 * - data-share-preload="lazy" : AUCUN téléchargement au chargement de la page.
 *   Le fetch démarre au premier contact (touchstart/mousedown) et le partage
 *   s'ouvre dès que le fichier est prêt. Obligatoire pour les pages qui listent
 *   une colonne entière de liens (historique des commandes Pro) : sans ça,
 *   chaque affichage de la page téléchargerait N PDF d'un coup.
 *
 * Hors mode standalone (navigateur classique), le script ne fait rien : le lien
 * garde son comportement normal (target=_blank = nouvel onglet).
 *
 * Symptôme si ça casse : en web app installée, le PDF s'ouvre en plein écran
 * sans possibilité de revenir (obligation de swiper ou relancer l'app).
 * Symptôme si le mode lazy casse : l'historique des commandes devient très lent
 * à charger en PWA (téléchargement de tous les PDF de la page à chaque visite).
 * Test associé : passer une commande fournisseur depuis la PWA iOS et cliquer
 * "Download PDF" -> la feuille de partage doit s'ouvrir ; idem depuis la
 * colonne PDF de l'historique des commandes.
 */
(function () {
    'use strict';

    var standalone = window.navigator.standalone === true ||
        (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);

    if (!standalone || !navigator.share || !navigator.canShare || typeof File === 'undefined') {
        return;
    }

    var links = document.querySelectorAll('a.orderstock-share-download');

    Array.prototype.forEach.call(links, function (link) {
        var cachedFile = null;
        var fetchPromise = null;
        var filename = link.getAttribute('data-filename') || 'document.pdf';
        var lazy = link.getAttribute('data-share-preload') === 'lazy';

        function preload() {
            if (fetchPromise) {
                return fetchPromise;
            }
            fetchPromise = fetch(link.href, { credentials: 'same-origin' })
                .then(function (response) {
                    if (!response.ok) {
                        throw new Error('HTTP ' + response.status);
                    }
                    return response.blob();
                })
                .then(function (blob) {
                    var file = new File([blob], filename, { type: blob.type || 'application/pdf' });
                    if (navigator.canShare({ files: [file] })) {
                        cachedFile = file;
                    }
                    return cachedFile;
                })
                .catch(function () {
                    // Préchargement impossible : on laissera le lien se comporter normalement.
                    return null;
                });
            return fetchPromise;
        }

        if (lazy) {
            // Démarrer le fetch dès le début du geste : touchstart précède le click
            // de quelques centaines de ms, le fichier est souvent prêt à temps.
            link.addEventListener('touchstart', preload, { passive: true });
            link.addEventListener('mousedown', preload);
        } else {
            preload();
        }

        link.addEventListener('click', function (event) {
            if (cachedFile) {
                event.preventDefault();
                navigator.share({ files: [cachedFile] }).catch(function (error) {
                    // AbortError = l'utilisateur a fermé la feuille de partage : ne rien faire.
                    if (!error || error.name !== 'AbortError') {
                        window.location.href = link.href;
                    }
                });
                return;
            }

            if (lazy) {
                // Fichier pas encore prêt : bloquer la navigation (sinon PDF plein
                // écran sans retour) et partager dès l'arrivée du blob. Si Safari
                // refuse le partage hors geste utilisateur (fetch trop long), le
                // prochain tap partagera instantanément grâce au cache.
                event.preventDefault();
                // Retour visuel pendant le téléchargement (indépendant de la langue).
                link.style.opacity = '0.5';
                preload().then(function (file) {
                    link.style.opacity = '';
                    if (!file) {
                        // Échec du téléchargement : navigation classique en dernier recours.
                        window.location.href = link.href;
                        return;
                    }
                    navigator.share({ files: [file] }).catch(function () {
                        // Partage refusé ou annulé : le fichier reste en cache pour le prochain tap.
                    });
                });
            }
            // Non-lazy sans cache : préchargement échoué, comportement normal du lien.
        });
    });
})();
