(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        var v = factory(require, exports);
        if (v !== undefined) module.exports = v;
    }
    else if (typeof define === "function" && define.amd) {
        define(["require", "exports", "../../requestTypes"], factory);
    }
})(function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.NotificationHandlers = void 0;
    const requestTypes_1 = require("../../requestTypes");
    class NotificationHandlers {
        constructor(connection, languageService, yamlSettings, settingsHandler) {
            this.connection = connection;
            this.languageService = languageService;
            this.yamlSettings = yamlSettings;
            this.settingsHandler = settingsHandler;
        }
        registerHandlers() {
            this.connection.onNotification(requestTypes_1.SchemaAssociationNotification.type, (associations) => this.schemaAssociationNotificationHandler(associations));
            this.connection.onNotification(requestTypes_1.DynamicCustomSchemaRequestRegistration.type, () => this.dynamicSchemaRequestHandler());
            this.connection.onNotification(requestTypes_1.VSCodeContentRequestRegistration.type, () => this.vscodeContentRequestHandler());
            this.connection.onNotification(requestTypes_1.SchemaSelectionRequests.type, () => this.schemaSelectionRequestHandler());
        }
        /**
         * Received a notification from the client with schema associations from other extensions
         * Update the associations in the server
         */
        schemaAssociationNotificationHandler(associations) {
            this.yamlSettings.schemaAssociations = associations;
            this.yamlSettings.specificValidatorPaths = [];
            this.settingsHandler.pullConfiguration().catch((error) => console.log(error));
        }
        /**
         * Received a notification from the client that it can accept custom schema requests
         * Register the custom schema provider and use it for requests of unknown scheme
         */
        dynamicSchemaRequestHandler() {
            const schemaProvider = ((resource) => {
                return this.connection.sendRequest(requestTypes_1.CustomSchemaRequest.type, resource);
            });
            this.languageService.registerCustomSchemaProvider(schemaProvider);
        }
        /**
         * Received a notification from the client that it can accept content requests
         * This means that the server sends schemas back to the client side to get resolved rather
         * than resolving them on the extension side
         */
        vscodeContentRequestHandler() {
            this.yamlSettings.useVSCodeContentRequest = true;
        }
        schemaSelectionRequestHandler() {
            this.yamlSettings.useSchemaSelectionRequests = true;
        }
    }
    exports.NotificationHandlers = NotificationHandlers;
});
//# sourceMappingURL=notificationHandlers.js.map