/**
 * 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 { EditorStore } from '../../../EditorStore.js';
import { ElementEditorState } from './../ElementEditorState.js';
import { type PackageableElement, type Connection, type ValidationIssue, type DatasourceSpecification, PackageableConnection, JsonModelConnection, FlatDataConnection, RelationalDatabaseConnection, type PostProcessor, type AuthenticationStrategy } from '@finos/legend-graph';
import { type PostProcessorEditorState } from './PostProcessorEditorState.js';
export declare abstract class ConnectionValueState {
    editorStore: EditorStore;
    connection: Connection;
    constructor(editorStore: EditorStore, connection: Connection);
    abstract label(): string;
}
export declare enum RELATIONAL_DATABASE_TAB_TYPE {
    GENERAL = "General",
    STORE = "Store",
    POST_PROCESSORS = "Post Processors"
}
export declare enum CORE_DATASOURCE_SPEC_TYPE {
    STATIC = "static",
    H2_LOCAL = "h2Local",
    H2_EMBEDDED = "h2Embedded",
    DATABRICKS = "databricks",
    SNOWFLAKE = "snowflake",
    REDSHIFT = "redshift",
    BIGQUERY = "bigQuery",
    SPANNER = "spanner",
    TRINO = "Trino"
}
export declare enum POST_PROCESSOR_TYPE {
    MAPPER = "Mapper"
}
export declare enum CORE_AUTHENTICATION_STRATEGY_TYPE {
    DELEGATED_KERBEROS = "delegatedKerberos",
    H2_DEFAULT = "h2Default",
    SNOWFLAKE_PUBLIC = "snowflakePublic",
    GCP_APPLICATION_DEFAULT_CREDENTIALS = "gcpApplicationDefaultCredentials",
    API_TOKEN = "apiToken",
    OAUTH = "oauth",
    USERNAME_PASSWORD = "userNamePassword",
    GCP_WORKLOAD_IDENTITY_FEDERATION = "gcpWorkloadIdentityFederation",
    MIDDLE_TIER_USERNAME_PASSWORD = "middleTierUserNamePassword",
    TRINO_DELEGATED_KERBEROS = "TrinoDelegatedKerberosAuth"
}
export declare class RelationalDatabaseConnectionValueState extends ConnectionValueState {
    connection: RelationalDatabaseConnection;
    localMode: boolean;
    selectedTab: RELATIONAL_DATABASE_TAB_TYPE;
    postProcessorState: PostProcessorEditorState | undefined;
    constructor(editorStore: EditorStore, connection: RelationalDatabaseConnection);
    selectPostProcessor: (postProcessor: PostProcessor | undefined) => void;
    get storeValidationResult(): ValidationIssue | undefined;
    setSelectedTab(val: RELATIONAL_DATABASE_TAB_TYPE): void;
    setLocalMode(val: boolean): void;
    label(): string;
    selectedDatasourceSpecificationType(spec: DatasourceSpecification): string | undefined;
    get selectedValidDatasources(): string[];
    get selectedValidAuthenticationStrategies(): string[];
    changeDatasourceSpec(type: string): void;
    selectedAuthenticationStrategyType(auth: AuthenticationStrategy): string | undefined;
    changeAuthenticationStrategy(type: string): void;
}
export declare class JsonModelConnectionValueState extends ConnectionValueState {
    connection: JsonModelConnection;
    constructor(editorStore: EditorStore, connection: JsonModelConnection);
    label(): string;
}
export declare class FlatDataConnectionValueState extends ConnectionValueState {
    connection: FlatDataConnection;
    constructor(editorStore: EditorStore, connection: FlatDataConnection);
    label(): string;
}
export declare class UnsupportedConnectionValueState extends ConnectionValueState {
    label(): string;
}
export declare class ConnectionEditorState {
    /**
     * NOTE: used to force component remount on state change
     */
    readonly uuid: string;
    editorStore: EditorStore;
    connection: Connection;
    connectionValueState: ConnectionValueState;
    constructor(editorStore: EditorStore, connection: Connection);
    buildConnectionValueEditorState(): ConnectionValueState;
}
export declare class PackageableConnectionEditorState extends ElementEditorState {
    connectionState: ConnectionEditorState;
    constructor(editorStore: EditorStore, element: PackageableElement);
    get connection(): PackageableConnection;
    reprocess(newElement: PackageableElement, editorStore: EditorStore): ElementEditorState;
}
//# sourceMappingURL=ConnectionEditorState.d.ts.map