import {formatMessage, formatTitleWithFallback, topicShortUrl} from "./utils";
import repository from "./Repository";

class NotificationManager {
    notify(subscription, notification, onClickFallback) {
        if (!this.shouldNotify(subscription, notification)) {
            return;
        }
        const message = formatMessage(notification);
        const title = formatTitleWithFallback(notification, topicShortUrl(subscription.baseUrl, subscription.topic));
        const n = new Notification(title, {
            body: message,
            icon: '/static/img/favicon.png'
        });
        if (notification.click) {
            n.onclick = (e) => window.open(notification.click);
        } else {
            n.onclick = onClickFallback;
        }
    }

    granted() {
        return Notification.permission === 'granted';
    }

    maybeRequestPermission(cb) {
        if (!this.granted()) {
            Notification.requestPermission().then((permission) => {
                const granted = permission === 'granted';
                cb(granted);
            });
        }
    }

    shouldNotify(subscription, notification) {
        const priority = (notification.priority) ? notification.priority : 3;
        if (priority < repository.getMinPriority()) {
            return false;
        }
        return true;
    }
}

const notificationManager = new NotificationManager();
export default notificationManager;