/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import type { LegendApplicationConfig, LegendApplicationConfigurationData, LegendApplicationVersionData } from './LegendApplicationConfig.js';
import { type AbstractPlugin, type AbstractPreset, LogEvent, type ExtensionsConfigurationData } from '@finos/legend-shared';
import type { LegendApplicationPluginManager } from './LegendApplicationPluginManager.js';
import { type DocumentationEntryData } from '../stores/DocumentationService.js';
import type { LegendApplicationPlugin } from '../stores/LegendApplicationPlugin.js';
import { ApplicationStore, type GenericLegendApplicationStore } from '../stores/ApplicationStore.js';
import type { VersionReleaseNotes } from '../stores/ReleaseNotesService.js';
export declare abstract class LegendApplicationLogger {
    abstract debug(event: LogEvent, ...data: unknown[]): void;
    abstract info(event: LogEvent, ...data: unknown[]): void;
    abstract warn(event: LogEvent, ...data: unknown[]): void;
    abstract error(event: LogEvent, ...data: unknown[]): void;
}
export declare class LegendApplicationWebConsole extends LegendApplicationLogger {
    debug(event: LogEvent, ...data: unknown[]): void;
    info(event: LogEvent, ...data: unknown[]): void;
    warn(event: LogEvent, ...data: unknown[]): void;
    error(event: LogEvent, ...data: unknown[]): void;
}
export interface LegendApplicationConfigurationInput<T extends LegendApplicationConfigurationData> {
    baseAddress?: string;
    configData: T;
    versionData: LegendApplicationVersionData;
    docEntries?: Record<string, DocumentationEntryData>;
}
export declare abstract class LegendApplication {
    protected config: LegendApplicationConfig;
    protected logger: LegendApplicationLogger;
    protected pluginManager: LegendApplicationPluginManager<LegendApplicationPlugin>;
    protected basePresets: AbstractPreset[];
    protected basePlugins: AbstractPlugin[];
    protected baseAddress: string;
    protected pluginRegister?: ((pluginManager: LegendApplicationPluginManager<LegendApplicationPlugin>, config: LegendApplicationConfig) => void) | undefined;
    protected _isConfigured: boolean;
    protected downloadHelperServiceWorkerPath: string | undefined;
    protected downloadHelper: boolean;
    protected releaseNotes: VersionReleaseNotes[] | undefined;
    protected constructor(pluginManager: LegendApplicationPluginManager<LegendApplicationPlugin>);
    setup(options: {
        /** Base URL of the application. e.g. /studio/, /query/ */
        baseAddress: string;
        /**
         * Provide an alternative mechanism to register and configure plugins and presets
         * which is more flexible by allowing configuring specific plugin or preset.
         */
        pluginRegister?: (pluginManager: LegendApplicationPluginManager<LegendApplicationPlugin>, config: LegendApplicationConfig) => void;
    }): LegendApplication;
    protected withBasePresets(presets: AbstractPreset[]): LegendApplication;
    protected withBasePlugins(plugins: AbstractPlugin[]): LegendApplication;
    withPresets(presets: AbstractPreset[]): LegendApplication;
    withPlugins(plugins: AbstractPlugin[]): LegendApplication;
    withDownloadHelper(path?: string | undefined): LegendApplication;
    withReleaseNotes(releaseNotes: VersionReleaseNotes[]): LegendApplication;
    setupApplicationStore(store: GenericLegendApplicationStore): void;
    fetchApplicationConfiguration(): Promise<[
        LegendApplicationConfig,
        ExtensionsConfigurationData
    ]>;
    loadDocumentationRegistryData(config: LegendApplicationConfig): Promise<void>;
    protected abstract configureApplication(input: LegendApplicationConfigurationInput<LegendApplicationConfigurationData>): Promise<LegendApplicationConfig>;
    protected abstract loadApplication(applicationStore: ApplicationStore<LegendApplicationConfig, LegendApplicationPluginManager<LegendApplicationPlugin>>): Promise<void>;
    start(): Promise<void>;
}
export declare const LEGEND_APPLICATION_ROOT_ELEMENT_TAG = "legend-application-root";
export declare const getApplicationRootElement: () => Element;
//# sourceMappingURL=LegendApplication.d.ts.map