/**
 * 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 GeneratorFn, type Hashable, ActionState } from '@finos/legend-shared';
import { type QueryBuilderExplorerTreePropertyNodeData } from '../../../explorer/QueryBuilderExplorerState.js';
import { QueryBuilderPropertyExpressionState } from '../../../QueryBuilderPropertyEditorState.js';
import type { QueryBuilderState } from '../../../QueryBuilderState.js';
import { type AbstractPropertyExpression, type Type, type VariableExpression, RawLambda } from '@finos/legend-graph';
import { QueryBuilderTDSColumnState } from '../QueryBuilderTDSColumnState.js';
import type { QueryBuilderTDSState } from '../QueryBuilderTDSState.js';
import { LambdaEditorState } from '../../../shared/LambdaEditorState.js';
export declare const QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE = "PROJECTION_COLUMN";
export interface QueryBuilderProjectionColumnDragSource {
    columnState: QueryBuilderProjectionColumnState;
}
export declare abstract class QueryBuilderProjectionColumnState extends QueryBuilderTDSColumnState implements Hashable {
    tdsState: QueryBuilderTDSState;
    columnName: string;
    wavgWeight: AbstractPropertyExpression | undefined;
    constructor(tdsState: QueryBuilderTDSState, columnName: string);
    setColumnName(val: string): void;
    setWavgWeight(val: AbstractPropertyExpression): void;
}
export declare class QueryBuilderSimpleProjectionColumnState extends QueryBuilderProjectionColumnState implements Hashable {
    lambdaParameterName: string;
    propertyExpressionState: QueryBuilderPropertyExpressionState;
    constructor(tdsState: QueryBuilderTDSState, propertyExpression: AbstractPropertyExpression, humanizePropertyName: boolean);
    setLambdaParameterName(val: string): void;
    isVariableUsed(variable: VariableExpression): boolean;
    changeProperty(node: QueryBuilderExplorerTreePropertyNodeData, humanizePropertyName: boolean): void;
    getColumnType(): Type | undefined;
    get hashCode(): string;
}
declare class QueryBuilderDerivationProjectionLambdaState extends LambdaEditorState {
    queryBuilderState: QueryBuilderState;
    derivationProjectionColumnState: QueryBuilderDerivationProjectionColumnState;
    /**
     * This is used to store the JSON string when viewing the query in JSON mode
     * TODO: consider moving this to another state if we need to simplify the logic of text-mode
     */
    readOnlylambdaJson: string;
    constructor(queryBuilderState: QueryBuilderState, derivationProjectionColumnState: QueryBuilderDerivationProjectionColumnState);
    get lambdaId(): string;
    setLambdaJson(lambdaJson: string): void;
    convertLambdaGrammarStringToObject(): GeneratorFn<void>;
    convertLambdaObjectToGrammarString(options?: {
        pretty?: boolean | undefined;
        preserveCompilationError?: boolean | undefined;
    }): GeneratorFn<void>;
}
export declare class QueryBuilderDerivationProjectionColumnState extends QueryBuilderProjectionColumnState implements Hashable {
    derivationLambdaEditorState: QueryBuilderDerivationProjectionLambdaState;
    lambda: RawLambda;
    returnType: Type | undefined;
    fetchingLambdaReturnTypeState: ActionState;
    constructor(tdsState: QueryBuilderTDSState, lambda: RawLambda);
    setLambda(val: RawLambda): void;
    setReturnType(val: Type | undefined): void;
    /**
     * Fetches lambda return type for derivation column.
     * Throws error if unable to fetch type or if type is not primitive or an enumeration
     * as expected by a projection column
     */
    fetchDerivationLambdaReturnType(options?: {
        forceRefresh?: boolean;
        forceConversionStringToLambda?: boolean;
        isBeingDropped?: boolean;
    }): GeneratorFn<void>;
    getIsolatedRawLambda(): RawLambda;
    setLambdaReturnType(type: string): void;
    getColumnType(): Type | undefined;
    get hashCode(): string;
}
export {};
//# sourceMappingURL=QueryBuilderProjectionColumnState.d.ts.map