import pwaOptions from "../../../pwa.config.json";
import type { Config } from "../../types";

const config: Config = pwaOptions;
/**
 * @description Service Worker utils
 * @class SWUtils
 */
export default class SWUtils {
  private checkSupport = () => {
    if (!("serviceWorker" in navigator)) {
      console.error("No support for service worker!");
      return false;
    }

    if (!("Notification" in window)) {
      console.error("No support for notification API");
      return false;
    }

    if (!("PushManager" in window)) {
      console.error("No support for Push API");
      return false;
    }
    return true;
  };

  private requestNotificationPermission = async () => {
    const permission = await Notification.requestPermission();

    if (permission !== "granted") {
      throw new Error("Notification permission not granted");
    }
  };

  notificationPermissions = async () => {
    if (!config?.notification) return;
    const isNotificationsSupported = this.checkSupport();
    if (isNotificationsSupported) await this.requestNotificationPermission();
  };

  forceUpdate() {
    if (!config?.forceUpdate) return;
    if ("serviceWorker" in navigator) {
      window.addEventListener("load", () => {
        navigator.serviceWorker.getRegistrations().then((registrations) => {
          registrations.forEach(function (registration) {
            registration.update();
          });
        });
      });
    }
  }
}
