
function trackInstall(worker, cb) {
  worker.addEventListener('statechange', function() {
    //If the worker is now installed, let the user know that there is an update ready
    if (worker.state == 'installed') {
      cb();
    }
  });
}

export function swUpdate() {
  navigator.serviceWorker.getRegistration().then(reg => {
    if (reg && reg.waiting) {
      reg.waiting.postMessage("skipWaiting");
      window.location.reload(true);
    }
  });
}

export function swInit(store) {

  const updateReady = () => store.commit("setUpdateAvailable", true);

  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('/sw.js')
      .then(function (reg) {
        console.log('Registration succeeded. Scope is ' + reg.scope);

        if (reg.waiting) {
          updateReady();
        }

        // If there's an updated worker installing, track its progress. If it becomes "installed", call
        // indexController._updateReady()
        if (reg.installing) {
          trackInstall(reg.installing, updateReady);
        }

        reg.addEventListener('updatefound', function () {
          trackInstall(reg.installing, updateReady);
        });

      }).catch(function (error) {
        console.log('Registration failed with ' + error);
      });
  }


}