var connectionManager;

function getApiClient(serverId) {

    if (connectionManager) {
        return Promise.resolve(connectionManager.getApiClient(serverId));
    }

    //importScripts('serviceworker-cache-polyfill.js');

    return Promise.reject();
}

function executeAction(action, data, serverId) {

    return getApiClient(serverId).then(function (apiClient) {

        switch (action) {
            case 'cancel-install':
                var id = data.id;
                return apiClient.cancelPackageInstallation(id);
            case 'restart':
                return apiClient.restartServer();
            default:
                clients.openWindow("/");
                return Promise.resolve();
        }
    });
}

self.addEventListener('notificationclick', function (event) {

    var notification = event.notification;
    notification.close();

    var data = notification.data;
    var serverId = data.serverId;
    var action = event.action;

    if (!action) {
        clients.openWindow("/");
        event.waitUntil(Promise.resolve());
        return;
    }

    event.waitUntil(executeAction(action, data, serverId));

}, false);