import AnimeNotifier from "./AnimeNotifier"

export default class ServiceWorkerManager {
	private arn: AnimeNotifier
	private uri: string

	constructor(arn: AnimeNotifier, uri: string) {
		this.arn = arn
		this.uri = uri
	}

	public register() {
		if(!("serviceWorker" in navigator)) {
			console.warn("service worker not supported, skipping registration")
			return
		}

		navigator.serviceWorker.register(this.uri)
		navigator.serviceWorker.addEventListener("message", evt => this.onMessage(evt))
	}

	public postMessage(message: any) {
		const controller = navigator.serviceWorker.controller

		if(!controller) {
			return
		}

		controller.postMessage(JSON.stringify(message))
	}

	private onMessage(evt: MessageEvent) {
		const message = JSON.parse(evt.data)

		switch(message.type) {
			case "new notification":
				if(this.arn.notificationManager) {
					this.arn.notificationManager.update()
				}

				break
		}
	}
}