/**
 * 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 } from '@finos/legend-shared';
import type { QueryBuilderState } from '../../QueryBuilderState.js';
import { type CompilationError, type LambdaFunction, type VariableExpression, Class } from '@finos/legend-graph';
import { QueryBuilderAggregationState } from './aggregation/QueryBuilderAggregationState.js';
import { QueryBuilderFetchStructureImplementationState } from '../QueryBuilderFetchStructureImplementationState.js';
import { QueryResultSetModifierState } from './QueryResultSetModifierState.js';
import { QueryBuilderPostFilterState } from './post-filter/QueryBuilderPostFilterState.js';
import type { QueryBuilderPostFilterOperator } from './post-filter/QueryBuilderPostFilterOperator.js';
import type { QueryBuilderAggregateOperator } from './aggregation/QueryBuilderAggregateOperator.js';
import { QueryBuilderDerivationProjectionColumnState, QueryBuilderSimpleProjectionColumnState, type QueryBuilderProjectionColumnState } from './projection/QueryBuilderProjectionColumnState.js';
import type { QueryBuilderFetchStructureState } from '../QueryBuilderFetchStructureState.js';
import { type QueryBuilderExplorerTreePropertyNodeData } from '../../explorer/QueryBuilderExplorerState.js';
import type { LambdaFunctionBuilderOption } from '../../QueryBuilderValueSpecificationBuilderHelper.js';
import { QueryBuilderWindowState } from './window/QueryBuilderWindowState.js';
import type { QueryBuilderTDS_WindowOperator } from './window/operators/QueryBuilderTDS_WindowOperator.js';
import type { QueryBuilderTDSColumnState } from './QueryBuilderTDSColumnState.js';
import type { ExportDataInfo } from '../../QueryBuilderResultState.js';
import type { QueryBuilderAggregateCalendarFunction } from './aggregation/QueryBuilderAggregateCalendarFunction.js';
export declare enum TDS_EXECUTION_SERIALIZATION_FORMAT {
    CSV = "CSV"
}
export declare class QueryBuilderTDSState extends QueryBuilderFetchStructureImplementationState implements Hashable {
    readonly aggregationState: QueryBuilderAggregationState;
    readonly postFilterState: QueryBuilderPostFilterState;
    readonly windowState: QueryBuilderWindowState;
    readonly resultSetModifierState: QueryResultSetModifierState;
    projectionColumns: QueryBuilderProjectionColumnState[];
    isConvertDerivationProjectionObjects: boolean;
    showPostFilterPanel: boolean;
    showWindowFuncPanel: boolean;
    useColFunc: boolean;
    postFilterOperators: QueryBuilderPostFilterOperator[];
    aggregationOperators: QueryBuilderAggregateOperator[];
    aggregationCalendarFunctions: QueryBuilderAggregateCalendarFunction[];
    windowFuncOperators: QueryBuilderTDS_WindowOperator[];
    constructor(queryBuilderState: QueryBuilderState, fetchStructureState: QueryBuilderFetchStructureState);
    get type(): string;
    get derivations(): QueryBuilderDerivationProjectionColumnState[];
    get hasParserError(): boolean;
    get fetchLabel(): string;
    get canBeExportedToCube(): boolean;
    get TEMPORARY__showPostFetchStructurePanel(): boolean;
    get usedExplorerTreePropertyNodeIDs(): string[];
    get fetchStructureValidationIssues(): string[];
    get allValidationIssues(): string[];
    get isQueryOptionsSet(): boolean;
    get tdsColumns(): QueryBuilderTDSColumnState[];
    get exportDataFormatOptions(): string[];
    getExportDataInfo(format: string): ExportDataInfo;
    isDuplicateColumn(col: QueryBuilderTDSColumnState): boolean;
    initialize(): void;
    initializeWithQuery(): void;
    isColumnInUse(tdsCol: QueryBuilderTDSColumnState): boolean;
    onClassChange(_class: Class | undefined): void;
    appendFetchStructure(lambdaFunction: LambdaFunction, options?: LambdaFunctionBuilderOption): void;
    setShowPostFilterPanel(val: boolean): void;
    setShowWindowFuncPanel(val: boolean): void;
    setUseColFunc(val: boolean): void;
    convertDerivationProjectionObjects(): GeneratorFn<void>;
    transformSimpleProjectionToDerivation(simpleProjectionColumnState: QueryBuilderSimpleProjectionColumnState): void;
    replaceColumn(oldVal: QueryBuilderProjectionColumnState, newVal: QueryBuilderProjectionColumnState): void;
    removeAllColumns(): void;
    removeColumn(val: QueryBuilderProjectionColumnState): void;
    addColumn(val: QueryBuilderProjectionColumnState, options?: {
        /**
         * Often time, we would want to enforce doing a sort when adding new column
         * to ensure aggregate columns stay at the bottom of the list of projections
         * But sometimes, we can opt in to use this flag to disable this sorting behavior,
         * such as when we build/process.
         */
        skipSorting?: boolean | undefined;
    }): void;
    moveColumn(sourceIndex: number, targetIndex: number): void;
    addNewBlankDerivation(): void;
    revealCompilationError(compilationError: CompilationError): boolean;
    clearCompilationError(): void;
    fetchProperty(node: QueryBuilderExplorerTreePropertyNodeData): void;
    fetchProperties(nodes: QueryBuilderExplorerTreePropertyNodeData[]): void;
    checkBeforeClearingColumns(onChange: () => void): void;
    checkBeforeChangingImplementation(onChange: () => void): void;
    isVariableUsed(variable: VariableExpression): boolean;
    get hasInvalidFilterValues(): boolean;
    get hasInvalidDerivedPropertyParameters(): boolean;
    get hashCode(): string;
    fetchDerivedReturnTypes(): GeneratorFn<void>;
}
//# sourceMappingURL=QueryBuilderTDSState.d.ts.map