// Gestion des fonctionnalités PWA côté client (service worker & push notifications)

const serviceWorkerPath = '/sw.js';

// Vérifier si le navigateur supporte les PWA / push
export function isPushSupported() {
  return typeof window !== 'undefined' && 'serviceWorker' in navigator && 'PushManager' in window;
}

// Enregistrer le service worker et attendre qu'il soit actif
export async function registerServiceWorker() {
  if (!isPushSupported()) return null;

  const registration = await navigator.serviceWorker.register(serviceWorkerPath);

  // Attendre que le service worker soit actif avant de l'utiliser
  await navigator.serviceWorker.ready;

  return registration;
}

// Récupérer la clé publique VAPID (côté client)
export function getVapidPublicKey() {
  return process.env.NEXT_PUBLIC_VAPID_PUBLIC_KEY;
}

// Convertir la clé VAPID base64 en Uint8Array
export function urlBase64ToUint8Array(base64String: string) {
  const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
  const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');

  const rawData = atob(base64);
  const outputArray = new Uint8Array(rawData.length);

  for (let i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }
  return outputArray;
}

// Demander la permission de notifications
export async function requestNotificationPermission() {
  if (typeof window === 'undefined' || !('Notification' in window)) return 'denied';

  if (Notification.permission === 'granted') {
    return 'granted';
  }

  return Notification.requestPermission();
}

