
(function(){ 

var debug = false;
var subscribe_after_seconds = 0;

var script_load_index = -1;

function loadScript(url, callback) {
    var head = document.head;
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = url;
    script.onreadystatechange = callback;
    script.onload = callback;
    head.appendChild(script);
	}

function scripts_loading() {
	script_load_index++;
	if (script_load_index>=scripts.length) firebase_init();
		else loadScript(scripts[script_load_index],function() { scripts_loading(); } );
	}

var scripts = [];
scripts.push("https://www.gstatic.com/firebasejs/6.2.4/firebase-app.js");
scripts.push("https://www.gstatic.com/firebasejs/6.2.4/firebase-messaging.js");

// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
  apiKey: "AIzaSyAbnRrA3nUUD_BJD1TaH8REfj0tCsvIXt0",
  authDomain: "garmin-israel-push.firebaseapp.com",
  databaseURL: "https://garmin-israel-push.firebaseio.com",
  projectId: "garmin-israel-push",
  storageBucket: "garmin-israel-push.appspot.com",
  messagingSenderId: "242661987815",
  appId: "1:242661987815:web:3f73453f12bef2d98b5942",
  measurementId: "G-LKTRQKLKTN"
};

var messaging = null;

function firebase_init() {
	
	if (debug) console.log("firebase_init");
	firebase.initializeApp(firebaseConfig);
	messaging = firebase.messaging();
	messaging.usePublicVapidKey("BMlr9O_ylfAeDfbtYZw5ig2qWF9iV6ch7bKTMnLExXtJt5G1chzminj2-StoEbbLM_ZCgmmGS_T0GfSY1eQzUW4");	

	messaging.onTokenRefresh(() => {
		messaging.getToken().then((refreshedToken) => {
			if (debug) console.log("Token refreshed.");
			sendTokenToServer(refreshedToken);
			}).catch((err) => {
			if (debug) console.log("Unable to retrieve refreshed token ", err);
			});
		});
		
	messaging.onMessage((payload) => {
		onMessageReceived(payload);
		});		
		
	setTimeout( function() {
		subscribe();
		} , subscribe_after_seconds*1000 );
		
	}

function sendTokenToServer(token) {
	if (debug) console.log("sendTokenToServer",token);
	var url = "https://cloud.inforu.co.il/webpush/?page=embed.register&token=8915-f7d15040074046e169d614fe7f78a510&WebPushToken="+encodeURIComponent(token);
	if (debug) console.log(url);
	loadScript(url, function() {} );
	}

function getToken() {
	messaging.getToken().then((currentToken) => {
		if (currentToken) {
			sendTokenToServer(currentToken);
			} else {
			if (debug) console.log("No Instance ID token available. Request permission to generate one.");
			//sendTokenToServer(false);
			}
		}).catch((err) => {
		if (debug) console.log("An error occurred while retrieving token. ", err);
		//sendTokenToServer(false);
		});
	}

function subscribe() {
	if (debug) console.log("subscribe");
	if (Notification.permission=="granted") {
		// getToken();
		return;
		}
	
	Notification.requestPermission().then((permission) => {
		if (permission === "granted") {
			if (debug) console.log("Notification permission granted.");
			getToken();
			} else {
			if (debug) console.log("Unable to get permission to notify.");
			}
		});
	}
	
document.addEventListener("DOMContentLoaded", function () {
	if (!Notification) {
		if (debug) console.log("Desktop notifications not available in your browser. Try Chromium.");	
		return;
		}
	scripts_loading();
	});
	
function SendMessage(data)	{

	if (debug) console.log(data);

	var params = {};
	params.body = data.body;
	if (data.icon) params.icon = data.icon;
	if (data.image) params.image = data.image;

	var notification = new Notification(data.title,params);	

	notification.onclick = function () {
		window.open(data.link);
		};
	
	}

function onMessageReceived(payload) {
	if (debug) console.log(payload);
	
	// var data = {};
	// if (payload && payload.notification && payload.notification.title) data.title = payload.notification.title;
	// if (payload && payload.notification && payload.notification.icon) data.icon = payload.notification.icon;
	// if (payload && payload.notification && payload.notification.body) data.body = payload.notification.body;
	// if (payload && payload.data && payload.data.link) data.link = payload.data.link;
	
	SendMessage(payload.data);
	}

})();		
			