// --- Service Worker pour la gestion des Notifications Push ---

// Permet au Service Worker de s'activer immédiatement après l'installation
self.addEventListener("message", (event) => {
    if (event.data && event.data.type === "SKIP_WAITING") {
        self.skipWaiting();
    }
});

// --- GESTION DES NOTIFICATIONS PUSH (Réception) ---
self.addEventListener('push', (event) => {
    if (event.data) {
        // Le payload JSON envoyé par votre serveur doit contenir
        // 'title', 'message' et 'link'.
        const data = event.data.json();

        const title = data.title || 'Nouvelle Notification';
        const message = data.message || 'Contenu mis à jour.';
        const link = data.link || '/'; // Lien par défaut vers la racine

        const options = {
            body: message,
            // PATH MIS À JOUR ICI : Assurez-vous que l'icône est accessible
            icon: data.icon || '/assets/notif.png',
            data: {
                link: link // On stocke le lien pour le réutiliser au clic
            }
        };

        // Affiche la notification
        event.waitUntil(
            self.registration.showNotification(title, options)
        );
    }
});

// --- GESTION DES CLICS SUR LA NOTIFICATION ---
self.addEventListener('notificationclick', (event) => {
    // Récupère le lien stocké dans la notification
    const urlToOpen = event.notification.data.link || '/';

    // Ferme la notification après le clic
    event.notification.close();

    // Ouvre l'URL associée, soit dans un onglet existant, soit dans un nouvel onglet
    event.waitUntil(
        clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {

            // Tente de trouver un client existant pour naviguer (si l'URL est déjà ouverte)
            for (const client of clientList) {
                if (client.url.includes(urlToOpen) && 'focus' in client) {
                    return client.focus();
                }
            }

            // Sinon, ouvre une nouvelle fenêtre/onglet
            return clients.openWindow(urlToOpen);
        })
    );
});
