/**
 * 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 LogService, ActionState } from '@finos/legend-shared';
import { CoreModel, SystemModel, PureModel } from '../graph/PureModel.js';
import type { AbstractPureGraphManager, GraphBuilderOptions } from '../graph-manager/AbstractPureGraphManager.js';
import type { GraphManagerPluginManager } from './GraphManagerPluginManager.js';
import type { PackageableElement } from '../graph/metamodel/pure/packageableElements/PackageableElement.js';
import type { Profile } from '../graph/metamodel/pure/packageableElements/domain/Profile.js';
import type { Enumeration } from '../graph/metamodel/pure/packageableElements/domain/Enumeration.js';
import type { Measure } from '../graph/metamodel/pure/packageableElements/domain/Measure.js';
import type { Class } from '../graph/metamodel/pure/packageableElements/domain/Class.js';
import type { Association } from '../graph/metamodel/pure/packageableElements/domain/Association.js';
import type { ConcreteFunctionDefinition } from '../graph/metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.js';
import type { Store } from '../graph/metamodel/pure/packageableElements/store/Store.js';
import type { Database } from '../graph/metamodel/pure/packageableElements/store/relational/model/Database.js';
import type { Mapping } from '../graph/metamodel/pure/packageableElements/mapping/Mapping.js';
import type { Service } from '../graph/metamodel/pure/packageableElements/service/Service.js';
import type { PackageableRuntime } from '../graph/metamodel/pure/packageableElements/runtime/PackageableRuntime.js';
import type { PackageableConnection } from '../graph/metamodel/pure/packageableElements/connection/PackageableConnection.js';
import type { DataElement } from '../graph/metamodel/pure/packageableElements/data/DataElement.js';
import type { FileGenerationSpecification } from '../graph/metamodel/pure/packageableElements/fileGeneration/FileGenerationSpecification.js';
import type { GenerationSpecification } from '../graph/metamodel/pure/packageableElements/generationSpecification/GenerationSpecification.js';
import type { Type } from '../graph/metamodel/pure/packageableElements/domain/Type.js';
export declare class BasicGraphManagerState {
    readonly pluginManager: GraphManagerPluginManager;
    readonly logService: LogService;
    graphManager: AbstractPureGraphManager;
    constructor(pluginManager: GraphManagerPluginManager, logService: LogService, graphManager?: AbstractPureGraphManager);
}
export declare class GraphManagerState extends BasicGraphManagerState {
    readonly coreModel: CoreModel;
    readonly systemModel: SystemModel;
    readonly systemBuildState: ActionState;
    readonly dependenciesBuildState: ActionState;
    readonly graphBuildState: ActionState;
    readonly generationsBuildState: ActionState;
    graph: PureModel;
    constructor(pluginManager: GraphManagerPluginManager, logService: LogService, graphManager?: AbstractPureGraphManager);
    /**
     * NOTE: this is temporary. System entities might eventually be collected from a metadata project.
     * Right now the essential models have been extracted from Pure to load the minimum system.
     * We might add more system entities as needed until the system model project(s) are setup.
     */
    initializeSystem(options?: GraphBuilderOptions): Promise<void>;
    resetGraph(): void;
    createNewGraph(): PureModel;
    /**
     * NOTE: for all elements the ordering of usable elements will be own elements, system elements, dependency elements.
     * Exception is made for types and profiles where we will show primitive and system elements first as those will be
     * leveraged most by users
     */
    get usableClassPropertyTypes(): Type[];
    get usableProfiles(): Profile[];
    get usableEnumerations(): Enumeration[];
    get usableMeasures(): Measure[];
    get usableClasses(): Class[];
    get usableAssociationPropertyClasses(): Class[];
    get usableAssociations(): Association[];
    get usableFunctions(): ConcreteFunctionDefinition[];
    get usableStores(): Store[];
    get usableDatabases(): Database[];
    get usableMappings(): Mapping[];
    get usableServices(): Service[];
    get usableRuntimes(): PackageableRuntime[];
    get usableConnections(): PackageableConnection[];
    get usableDataElements(): DataElement[];
    get usableGenerationSpecifications(): GenerationSpecification[];
    get usableFileGenerations(): FileGenerationSpecification[];
    get usableElements(): PackageableElement[];
}
//# sourceMappingURL=GraphManagerState.d.ts.map