/* eslint-env serviceworker */
/* global workbox */
importScripts(
  "https://storage.googleapis.com/workbox-cdn/releases/6.4.1/workbox-sw.js",
);

self.addEventListener("install", (event) => {
  console.log("Adding event listener for:", event);
  importScripts(
    "safari-notifications.js",
    "nacl.js",
    "noble-curves.js",
    "noble-hashes.js",
  );
});

self.addEventListener("push", function (event) {
  event.waitUntil(
    (async () => {
      try {
        let payload;
        if (event.data) {
          payload = JSON.parse(event.data.text());
        }
        const message = await self.getNotificationCount();
        if (message) {
          console.log("Will notify user:", message);
          const title = payload ? payload.title : "Custom Title";
          const options = {
            body: message,
            icon: payload ? payload.icon : "icon.png",
            badge: payload ? payload.badge : "badge.png",
          };
          await self.registration.showNotification(title, options);
        } else {
          console.log("No notification message, so will not tell the user.");
        }
      } catch (error) {
        console.error("Error processing the push event:", error);
      }
    })(),
  );
});

self.addEventListener("message", (event) => {
  if (event.data && event.data.type === "SEND_LOCAL_DATA") {
    self.secret = event.data.data;
    event.ports[0].postMessage({ success: true });
  }
});

self.addEventListener("activate", (event) => {
  event.waitUntil(clients.claim());
  console.log("Service worker activated", event);
});

self.addEventListener("fetch", (event) => {
  console.log("Got fetch event", event.request);
});

self.addEventListener("error", (event) => {
  console.error("Error in Service Worker:", event.message);
  console.error("File:", event.filename);
  console.error("Line:", event.lineno);
  console.error("Column:", event.colno);
  console.error("Error Object:", event.error);
});

workbox.precaching.precacheAndRoute(self.__WB_MANIFEST);