/* eslint no-unused-vars: 0 */
/* eslint no-undef: 0 */

function showNewMailsNotification(address, reloadPage) {
    // We want the page to be reloaded. But then when clicking the notification, it can not find the tab and will open a new one.

    const notification = new Notification(address, {
        body: 'You have new messages',
        icon: '/images/logo.png',
        tag: '48hr-email-replace-notification',
        renotify: true
    })
    notification.addEventListener('click', event => {
        event.preventDefault()
        window.focus()
    })

    if (reloadPage) {
        location.reload()
    }
}

function enableNewMessageNotifications(address, reloadPage) {
    enableNotifications()
    const socket = io()
    socket.emit('sign in', address)

    socket.on('reconnect', () => {
        socket.emit('sign in', address)
    })
    socket.on('new emails', () => {
        showNewMailsNotification(address, reloadPage)
    })

    // Listen for timer sync from server
    socket.on('refresh-timer-sync', (secondsRemaining) => {
        if (window.updateRefreshTimer && typeof window.updateRefreshTimer === 'function') {
            window.updateRefreshTimer(secondsRemaining)
        }
    })
}

function enableNotifications() {
    // Let's check if the browser supports notifications
    if (!('Notification' in window)) {
        return false
    }

    // Let's check whether notification permissions have already been granted
    if (Notification.permission === 'granted') {
        return true
    }

    // Otherwise, we need to ask the user for permission
    if (Notification.permission !== 'denied') {
        Notification.requestPermission(permission => {
            // If the user accepts, let's create a notification
            return permission === 'granted'
        })
    }

    // Finally, if the user has denied notifications and you
    // want to be respectful there is no need to bother them any more.
}