const staticCacheName = 'site-static-v2';
const dynamicCacheName = 'site-dynamic-v1';
const assets = [
    '/offline.html',
    '/css/app.css',
    '/css/normalize.css',
    '/css/webapp.css',
    '/css/webappdark.css',
    '/images/icons/Vagttelefon-normal.svg',
    '/images/icons/Vagttelefon-hvid.svg',
    '/images/icons/about.svg',
    '/images/icons/Aktiviteter.svg',
    '/images/icons/Home.svg',
    '/images/icons/Kontoret.svg',
    '/images/icons/location.svg',
    '/images/icons/Menuplan.svg',
    '/images/icons/news.svg',
    '/images/icons/phone.svg',
    '/images/icons/questionmark.svg',
    '/images/icons/settings-hvid.svg',
    '/images/icons/user.svg',
    '/images/icons/user-hvid.svg',
    '/images/icons/Vejledninger.svg',
    '/images/icons/watermelon.svg',
    '/images/logos/Logo-hvid.svg',
    '/images/logos/Logo-normal.svg',
    '/images/icons/Logout.svg'
];

// install event
self.addEventListener('install', evt => {
    console.log('service worker installed');
    evt.waitUntil(
        caches.open(staticCacheName).then((cache) => {
            //console.log('caching shell assets');
            return cache.addAll(assets);
        }).catch((r) => {
            console.log("Install Fail");
        })
    );
});

// activate event
self.addEventListener('activate', evt => {
    console.log('service worker activated');
    evt.waitUntil(
        caches.keys().then(keys => {
            //console.log(keys);
            return Promise.all(keys
                .filter(key => key !== staticCacheName && key !== dynamicCacheName)
                .map(key => caches.delete(key))
            );
        })
    );

});

self.addEventListener('fetch', evt => {
    console.log('fetch event');
    
    if(!navigator.onLine)
        evt.respondWith(
            caches.match(evt.request).then(cacheRes => {
                return cacheRes || caches.match('/offline.html');
            })
        );
    else
        evt.respondWith(
            fetch(evt.request).then(fetchRes => {
                return caches.open(dynamicCacheName).then(cache => {
                    cache.put(evt.request.url, fetchRes.clone());
                    return fetchRes;
                })
            })
        );
});

self.addEventListener('push', function(event) {
    if (!(self.Notification && self.Notification.permission === 'granted')) {
        //notifications aren't supported or permission not granted!
        return;
    }

    if (event.data) {
        let msg = event.data.json();
        console.log(msg)
        event.waitUntil(self.registration.showNotification(msg.title, {
            body: msg.body,
            icon: msg.icon,
	    badge: msg.badge,
            actions: msg.actions
        }));
    }
});

self.addEventListener('notificationclick', (event) => {
  event.notification.close(); 

  if (event.action === 'some_action') {
    self.clients.openWindow('/home');
  } else {
    self.clients.openWindow('/')
  }
});