/**
 * 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 ObserverContext, type Type, type ValueSpecification, type PureModel, type GraphManagerState, type RawLambda, VariableExpression, LambdaFunction, Multiplicity, ParameterValue } from '@finos/legend-graph';
import { type Hashable } from '@finos/legend-shared';
export declare enum PARAMETER_SUBMIT_ACTION {
    RUN = "RUN",
    EXPORT = "EXPORT",
    DATA_CUBE = "DATA_CUBE"
}
export declare const buildParametersLetLambdaFunc: (graph: PureModel, lambdaParametersStates: LambdaParameterState[]) => LambdaFunction;
/**
 * For most query executions we will use the stragtical method of sending in `paramValues` as part of the execution input payload.
 * However when the user wants to use a function value as the parameter value, engine does not understand this i.e for date param the functions `now()`, `today()`.
 * Engine Does not support this because those functions require a building of execution nodes inside the execution plan.
 * To continue supporting this execution flow , we will add let statements for parameter values with function values so that they can be evaluated to constants in the execution plan.
 */
export declare const doesLambdaParameterStateContainFunctionValues: (parameterState: LambdaParameterState) => boolean;
export declare const getParameterStatesWithFunctionValues: (parameterStates: LambdaParameterState[]) => LambdaParameterState[];
export declare const buildExecutionParameterValues: (paramStates: LambdaParameterState[], graphState: GraphManagerState) => ParameterValue[];
export declare const getRawLambdaForLetFuncs: (parameterStates: LambdaParameterState[], graphManagerState: GraphManagerState) => RawLambda | undefined;
export declare const getExecutionQueryFromRawLambda: (rawLambda: RawLambda, parameterStates: LambdaParameterState[], graphManagerState: GraphManagerState) => RawLambda;
export declare const buildExecutionQueryFromLambdaFunction: (lambdaFunction: LambdaFunction, parameterStates: LambdaParameterState[], graphManagerState: GraphManagerState) => LambdaFunction;
export declare class LambdaParameterState implements Hashable {
    readonly uuid: string;
    readonly parameter: VariableExpression;
    readonly graph: PureModel;
    readonly observerContext: ObserverContext;
    value: ValueSpecification | undefined;
    constructor(variableExpression: VariableExpression, observerContext: ObserverContext, graph: PureModel);
    get hashCode(): string;
    mockParameterValue(): void;
    setValue(value: ValueSpecification | undefined): void;
    changeVariableType(type: Type): void;
    changeMultiplicity(variableExpression: VariableExpression, mul: Multiplicity): void;
    get variableName(): string;
    get variableType(): Type | undefined;
}
export declare class ParameterInstanceValuesEditorState {
    showModal: boolean;
    submitAction: {
        handler: () => Promise<void>;
        label: string;
    } | undefined;
    constructor();
    setShowModal(val: boolean): void;
    setSubmitAction(val: {
        handler: () => Promise<void>;
        label: string;
    } | undefined): void;
    open(handler: () => Promise<void>, label: string): void;
    close(): void;
}
export declare abstract class LambdaParametersState implements Hashable {
    parameterStates: LambdaParameterState[];
    parameterValuesEditorState: ParameterInstanceValuesEditorState;
    constructor();
    get hashCode(): string;
    addParameter(val: LambdaParameterState): void;
    removeParameter(val: LambdaParameterState): void;
    setParameters(val: LambdaParameterState[]): void;
}
//# sourceMappingURL=LambdaParameterState.d.ts.map