// Service worker SOLO PUSH: no cachea la app (evita servir versiones viejas sin
// estilos tras un redeploy). El navegador y el CDN ya manejan la frescura con
// assets versionados. Su unica funcion es habilitar notificaciones push + PWA.
self.addEventListener('install', () => {
  self.skipWaiting();
});

self.addEventListener('activate', (e) => {
  e.waitUntil(
    (async () => {
      // Borra CUALQUIER cache vieja (incluida la del shell que causaba el bug
      // de "app sin estilos" tras redeploy).
      const keys = await caches.keys();
      await Promise.all(keys.map((k) => caches.delete(k)));
      await self.clients.claim();
    })(),
  );
});

// Sin fetch handler a proposito: nada de cache-first ni network-first. Cada
// request va directo a la red/CDN, siempre la ultima version.

// --- Notificaciones push ---
self.addEventListener('push', (e) => {
  let d = {};
  try {
    d = e.data ? e.data.json() : {};
  } catch {
    d = { cuerpo: e.data ? e.data.text() : '' };
  }
  const titulo = d.titulo || 'Gustito Xpress Negocios';
  const opts = {
    body: d.cuerpo || '',
    icon: '/icon-192.png',
    badge: '/badge-96.png',
    vibrate: [250, 120, 250],
    data: { url: d.url || '/' },
    tag: d.tag || undefined,
    renotify: true,
  };
  e.waitUntil(self.registration.showNotification(titulo, opts));
});

self.addEventListener('notificationclick', (e) => {
  e.notification.close();
  const url = (e.notification.data && e.notification.data.url) || '/';
  e.waitUntil(
    (async () => {
      const cs = await self.clients.matchAll({ type: 'window', includeUncontrolled: true });
      for (const c of cs) {
        if ('focus' in c) {
          c.navigate(url).catch(() => {});
          return c.focus();
        }
      }
      if (self.clients.openWindow) return self.clients.openWindow(url);
    })(),
  );
});
