'use strict';

const name = 'example-pwa-site-v1';
const assets = [
  '/',
  '/index.html',
  '/styles.css',
  '/app.js',
  '/images/Bear.png',
  '/images/DeusEx.png',
  '/images/Face.png',
  '/images/Tony_Stark.jpg',
];

// install  - https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/install_event
// activate - https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/activate_event
// message  - https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/message_event
// fetch    - https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/fetch_event
// sync     - https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/sync_event
// push     - https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/push_event

self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open(name).then((cache) => {
      cache.addAll(assets);
    }),
  );
});

self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then((res) => {
      return res || fetch(event.request);
    }),
  );
});

const enableNavigationPreload = async () => {
  if (self.registration.navigationPreload) {
    await self.registration.navigationPreload.enable();
  }
};

self.addEventListener('activate', (event) => {
  event.waitUntil(enableNavigationPreload());
});

self.addEventListener('push', function (event) {
  console.log('[Service Worker] Push Received.');
  console.log(`[Service Worker] Push had this data: "${event.data.text()}"`);

  const title = 'Push Codelab';
  const options = {
    body: 'Yay it works.',
    icon: 'images/icon.png',
    badge: 'images/badge.png',
  };

  event.waitUntil(self.registration.showNotification(title, options));
});