// Service worker del CLIENTE en modo SOLO PUSH.
// NO cachea ni intercepta 'fetch', asi que NUNCA sirve versiones viejas de la app
// (ese fue el problema antes). Solo existe para recibir las notificaciones push
// del estado del pedido (en preparacion, va en camino, listo).
self.addEventListener('install', () => self.skipWaiting());

self.addEventListener('activate', (e) => {
  e.waitUntil(
    (async () => {
      // Limpia cualquier cache que hubiera quedado de versiones anteriores.
      const keys = await caches.keys();
      await Promise.all(keys.map((k) => caches.delete(k)));
      await self.clients.claim();
    })(),
  );
});

// --- Notificaciones push (avisos del estado del pedido) ---
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';
  const opts = {
    body: d.cuerpo || '',
    icon: '/icon-192.png',
    badge: '/badge-96.png',
    vibrate: [200, 100, 200],
    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);
    })(),
  );
});
