import { ODataOrderByDirection } from "../enums/enums";
import { ODataConfig } from "./odataconfig";
import { ODataComparisonType, ODataFilterType, ODataLogicalOperationType } from "./odata-enums";
import { WithIndexer } from "../../fd-toolbox-core/types/with-indexer";
export declare const odataConstants: {
    readonly defaultOrderByPriority: 1;
};
/**
 * Options for configuring OData filters
 */
export interface ODataFilterOptions {
    /** Type of comparison for the filter */
    comparisonType?: ODataComparisonType;
    /** Type of filter */
    type?: ODataFilterType;
    /** Logical operation to combine with other filters */
    logicalOperationType?: ODataLogicalOperationType;
}
/**
 * Builder for {@link ODataConfig}
 */
export declare class ODataBuilder {
    #private;
    constructor(oDataConfig?: ODataConfig);
    /**
     * Filter request
     *
     * @param leftSide - property to filter
     * @param rightSide - data to filter by
     * @param operator - (optional) filter operator {@link oDataOperators}
     * @param options - (optional) filter options {@link ODataFilterOptions}
     */
    filter(leftSide: string, rightSide: unknown, operator?: string, options?: ODataFilterOptions): this;
    /**
     * Filter for string type
     *
     * @param leftSide - property to filter
     * @param rightSide - data to filter by
     * @param operator - (optional) filter operator {@link oDataOperators}
     * @param options - (optional) filter options {@link ODataFilterOptions}
     */
    filterString(leftSide: string, rightSide: string, operator?: string, options?: ODataFilterOptions): this;
    /**
     * Filter for Uuid type
     *
     * @param leftSide - property to filter
     * @param rightSide - data to filter by
     * @param operator - (optional) filter operator {@link oDataOperators}
     * @param options - (optional) filter options {@link ODataFilterOptions}
     */
    filterUuid(leftSide: string, rightSide: string, operator?: string, options?: ODataFilterOptions): this;
    /**
     * Limit selected properties in an object
     *
     * @param value object with selected properties
     */
    selectMany(value: WithIndexer<string[]>): this;
    /**
     * Limit selected properties in an array
     *
     * @param value array of properties
     */
    selectArray(value: string[]): this;
    /**
     *  Limit selected properties
     *
     * @param value selected property
     */
    select(value: string): this;
    /**
     * Add expanded properties
     *
     * @param value properties to expand
     */
    expandMany(value: string[]): this;
    /**
     * Add expanded property
     *
     * @param value property to expand
     */
    expand(value: string): this;
    /**
     * Set order options
     *
     * @param propertyName - name of property
     * @param direction - direction of order
     * @param priority - priority of order
     */
    orderBy(propertyName: string, direction: ODataOrderByDirection, priority?: number): this;
    /**
     * Set number of records to return
     *
     * @param value number of records
     */
    top(value: number): this;
    /**
     * Skip a number of records
     *
     * @param value number of records to skip
     */
    skip(value: number): this;
    /**
     * Record count
     */
    count(): this;
    /**
     * Build {@link ODataConfig}
     *
     * @returns - {@link ODataConfig} with all changes from {@link ODataBuilder} methods
     */
    build(): {
        filters: import("../../../generated/npm-package").BaseODataFilter<unknown>[];
        expands: string[];
        orderBys: import("../../../generated/npm-package").ODataOrderBy[];
        selects: string[];
        top?: number;
        skip?: number;
        count?: boolean;
    };
}
