﻿var config = {
    messagingSenderId: "626447345504",
};

firebase.initializeApp(config);
const messaging = firebase.messaging();

navigator.serviceWorker.register('/Notifications/sw.js')
    .then(function (registration) {
        messaging.useServiceWorker(registration);

        messaging.requestPermission()
            .then(function () {
                console.log('[FIREBASE] Notification permission granted.');
                messaging.getToken()
                    .then(function (currentToken) {
                        if (currentToken) {
                            console.log('[FIREBASE] Token: ' + currentToken)
                            sendTokenToServer(currentToken);
                        } else {
                            console.log('[FIREBASE] No Instance ID token available. Request permission to generate one.');
                            setTokenSentToServer(false);
                        }
                    })
                    .catch(function (err) {
                        console.log('[FIREBASE] An error occurred while retrieving token. ', err);
                        setTokenSentToServer(false);
                    });
            })
            .catch(function (err) {
                console.log('[FIREBASE] Unable to get permission to notify.', err);
            });
    });

messaging.onMessage(function (payload) {
    console.log("[FIREBASE] Notification received: ", payload);
    toastr.options = {
        "preventDuplicates": true,
        "timeOut": "15000",
        "onclick": function () {
            window.location.href = payload.notification.click_action
        }
    }
    toastr["info"](payload.notification.body, payload.notification.title);
});

messaging.onTokenRefresh(function () {
    messaging.getToken()
        .then(function (refreshedToken) {
            console.log('[FIREBASE] Token refreshed.');
            setTokenSentToServer(false);
            sendTokenToServer(refreshedToken);
        })
        .catch(function (err) {
            console.log('[FIREBASE] Unable to retrieve refreshed token ', err);
        });
});

function sendTokenToServer(currentToken) {

    if (!isTokenSentToServer()) {
        console.log('[FIREBASE] Sending token to server...');
        $.post("/token/savetoken", { token: currentToken }).done(function (data) {
            if (data.success) {
                console.log("[FIREBASE] TOKEN Saved successfully")
                setTokenSentToServer(true);
            } else {
                console.log(data.error);
                setTokenSentToServer(false);
            }
        }).fail(function (jqxhr, textStatus, error) {
            console.log(error.toString());
            setTokenSentToServer(false);
        });
    } else {
        console.log('[FIREBASE] Token already sent to server so won\'t send it again unless it changes');
    }
}

function isTokenSentToServer() {
    return window.localStorage.getItem('rtvaTokenSentToServer') == 1;
}

function setTokenSentToServer(sent) {
    window.localStorage.setItem('rtvaTokenSentToServer', sent ? 1 : 0);
}