import { GuidValue } from "../../shared";
import { EnterprisePropertyColumnMapping, EnterprisePropertyDefinition } from "../enterprise-properties";
import { PropertyIndexedType, UserPickingType } from "../Enums";
import { Identity } from "../identities";
import { PromotedTagOptions } from "../PromotedTagOptions";
import { FilterLogicalOperator, FilterOperator } from "../QueryFilter";
import { SidePanelPosition } from "../sidepanel";
import { ITypedFilterEngineHandler } from "./ITypedFilterEngineHandler";
export declare enum FilterEngineRenderType {
    Dropdown = 0,
    List = 1,
    Tags = 2,
    IconButtons = 3
}
export declare enum FilterEngineDefaultPosition {
    Top = 0,
    Left = 1,
    Right = 2,
    Dialog = 3
}
export declare enum FilterEngineChipColorType {
    Default = 0,
    EnterpriseGlossary = 1,
    Custom = 2
}
export declare enum FilterEngineBooleanOption {
    No = 0,
    Yes = 1
}
export declare enum FilterEngineSearchBoxMode {
    Properties = 0,
    FullText = 1
}
export declare enum FilterEngineOperator {
    AND = 0,
    OR = 1
}
export declare enum FilterEnginePersonValueSortOrder {
    Alphabetical = 0,
    Count = 1
}
export declare enum FilterEngineTextValueSortOrder {
    Alphabetical = 0,
    Count = 1
}
export declare enum FilterEngineTagsValueSortOrder {
    Alphabetical = 0,
    Count = 1
}
export declare enum DateType {
    FromTo = 0,
    Period = 1
}
export declare enum DateTimePeriod {
    MoreThanOneYearAgo = 0,
    OneYearAgo = 1,
    SixMonthsAgo = 2,
    OneMonthAgo = 3,
    OneWeekAgo = 4,
    Today = 5,
    LaterThanToday = 6
}
export declare enum EnterprisePropertyDataTypeIds {
    EnterpriseKeywords = "c65cc969-4f63-41bf-9956-f6e2c843b196",
    Media = "8883bebf-4c38-4b70-8195-8a9cb66f8252",
    RichText = "927c1f21-d34b-4e7b-aa97-d12d5e31711e",
    Language = "19cd4544-e2a0-4498-8db8-c8fc74fcce54",
    Data = "502f7df9-e961-4c6a-85f0-2e2b0b06b476",
    Tags = "581eb7ee-a9af-42e0-a73e-d23af3332813",
    Text = "7667bdd4-7995-4536-b3e9-bacb829d6f5e",
    Number = "a7ad0d68-0fec-44ab-b468-028e718dbffc",
    DateTime = "b8549e8c-e60f-48bb-8f57-2d03ed84131d",
    Boolean = "f27cdaac-fd29-4552-bd56-72cd2f6fb3f1",
    Person = "8a96e2a9-963d-47fe-b0d8-851fbf948e33",
    Taxonomy = "786bfddc-df08-4441-b1ce-ec0730af8113",
    Extended = "e85eda7f-029e-4bb9-902d-fcd631ab564b"
}
export interface Refiner<T> {
    name: string;
    entries?: Array<T>;
}
export interface Refinement {
    refinementName: string;
    refinementValue: string;
    refinementToken: string;
    refinementCount: number;
}
export interface FilterEngineContextProperty {
    title: string;
    type: BaseFilterEnginePropertyType;
    inheritFromType?: GuidValue;
    internalName?: string;
    getSettings?: () => any;
    hideSquareBrackets?: boolean;
}
export interface FilterEngineContextPropertyDefinition {
    typedHandler: new (property: any, defaultRouterValue: any, isRefinable: boolean, hasFilterState: boolean, enterpriseProperty: EnterprisePropertyDefinition) => ITypedFilterEngineHandler;
    /**
     * @deprecated Will be removed in 8. Use propertyRendererManifestIds instead.
     */
    propertyRendererManifestId: GuidValue;
    propertyRendererManifestIds?: GuidValue[];
    propertySettingsManifestId?: GuidValue;
    propertyDefaultValueInputManifestId?: GuidValue;
    selectionsAreaPropertyRendererManifestId?: GuidValue;
    propertySettingsFixer?: (context: FilterEngineContext, property: BaseFilterEngineProperty, propertyDefinitionHash: {
        [internalName: string]: EnterprisePropertyDefinition;
    }) => void;
}
export type BaseFilterEnginePropertyType = PropertyIndexedType | GuidValue;
export interface BaseFilterEngineProperty {
    value: unknown;
    name: string;
    type: BaseFilterEnginePropertyType;
    renderType: FilterEngineRenderType;
    collapsedByDefault: boolean;
    defaultPosition: FilterEngineDefaultPosition;
    defaultVisibleListItems?: number;
    width?: number;
    entries?: Array<Refinement>;
}
export interface TypedFilterEnginePropertyOutput {
    operator: FilterOperator.Equal | FilterOperator.GreaterThan | FilterOperator.LessThan | FilterOperator.NotEqual | FilterOperator.In;
    logicalOperator: FilterLogicalOperator;
    internalName: string;
    type: PropertyIndexedType.Boolean | PropertyIndexedType.Text | PropertyIndexedType.Number | PropertyIndexedType.Person | PropertyIndexedType.Taxonomy | PropertyIndexedType.EnterpriseKeywords | PropertyIndexedType.DateTime | PropertyIndexedType.Tags;
    sub: TypedFilterEnginePropertyOutput[];
}
export interface BaseFilterEnginePropertyOutput {
    type: "query" | "refiner";
}
export interface QueryFilterEnginePropertyOutput extends BaseFilterEnginePropertyOutput {
    type: "query";
    value: TypedFilterEnginePropertyOutput;
}
export interface RefinerFilterEnginePropertyOutput extends BaseFilterEnginePropertyOutput {
    type: "refiner";
    value: FilterEngineRefinementOutput;
}
export interface FilterEngineRefinementOutput {
    logicalOperator: FilterEngineOperator;
    isolatedRefinementEnabled: boolean;
    internalName: string;
    refinerName: string;
    refinements: Array<Refinement>;
    type: BaseFilterEnginePropertyType;
}
export interface PersonFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    type: PropertyIndexedType.Person;
    value: Array<Identity>;
    sub: PersonFilterEnginePropertyOutput[];
}
export interface NumberFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    type: PropertyIndexedType.Number;
    value: number;
    sub: NumberFilterEnginePropertyOutput[];
}
export interface TextFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    type: PropertyIndexedType.Text;
    value: string;
    sub: TextFilterEnginePropertyOutput[];
}
export interface TagsFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    type: PropertyIndexedType.Tags;
    value: Array<string>;
    sub: TagsFilterEnginePropertyOutput[];
}
export interface BooleanFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    type: PropertyIndexedType.Boolean;
    value: FilterEngineBooleanOption;
    sub: BooleanFilterEnginePropertyOutput[];
}
export interface DateTimeFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    value: DateFilterValue;
    type: PropertyIndexedType.DateTime;
    sub: DateTimeFilterEnginePropertyOutput[];
    periodValue: [DateTimePeriod, DateTimePeriod];
}
export interface TypeFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    value: Array<GuidValue>;
    type: PropertyIndexedType.Text;
    sub: TypeFilterEnginePropertyOutput[];
}
export interface TagFilterEnginePropertyOutput extends TypedFilterEnginePropertyOutput {
    promotedTagOptions: PromotedTagOptions;
}
export interface DateTimeFilterEngineProperty extends BaseFilterEngineProperty {
    value: DateFilterValue;
    type: PropertyIndexedType.DateTime;
    dateType: DateType;
    periodValue: [DateTimePeriod, DateTimePeriod];
}
export interface DateFilterValue {
    fromDate?: Date;
    toDate?: Date;
}
export interface BooleanFilterEngineProperty extends BaseFilterEngineProperty {
    value: FilterEngineBooleanOption;
    type: PropertyIndexedType.Boolean;
}
export interface TextFilterEngineProperty extends BaseFilterEngineProperty {
    value: string;
    type: PropertyIndexedType.Text;
    operator: FilterEngineOperator;
    showResultCount: boolean;
    valueSortOrder: FilterEngineTextValueSortOrder;
    showSearchValueBox: boolean;
}
export interface TagsFilterEngineProperty extends BaseFilterEngineProperty {
    value: Array<string>;
    type: PropertyIndexedType.Tags;
    showChipsPropertyLabel: boolean;
}
export interface NumberFilterEngineProperty extends BaseFilterEngineProperty {
    value: number;
    type: PropertyIndexedType.Number;
}
export interface PersonFilterEngineProperty extends BaseFilterEngineProperty {
    value: Array<Identity>;
    filterSelection: UserPickingType;
    type: PropertyIndexedType.Person;
    operator: FilterEngineOperator;
    showResultCount: boolean;
    valueSortOrder: FilterEnginePersonValueSortOrder;
    showTagsPropertyLabel: boolean;
}
export interface FilterEngineSearchBoxSettings {
    mode: FilterEngineSearchBoxMode;
    text: string;
    width?: number;
    properties: Array<string>;
}
export interface FilterEngineSettings {
    showSearchBox: boolean;
    searchBoxSettings: FilterEngineSearchBoxSettings;
    enablePartialWordSearch: boolean;
    properties: Array<BaseFilterEngineProperty>;
    saveFilterState: boolean;
    showSelectedValuesArea: boolean;
    selectedValuesAreaPosition: FilterEngineDefaultPosition;
    selectedDialogPosition: SidePanelPosition;
    showPropertyLabel: boolean;
    maxVisibleSelections: number;
    outlinedStyle: boolean;
    roundedStyle: boolean;
    filledStyle: boolean;
    chipColors: FilterEngineChipColorType;
    customChipTextColor: string;
    customChipBackgroundColor: string;
    runQueryOnLoad: boolean;
    fixedFilter: boolean;
    breakLine: boolean;
}
export interface FilterEngineRouterState {
    id: GuidValue;
    keyword: string;
    filters: Array<FilterEngineRouterProperty>;
    pageNumber: number;
}
export interface FilterEngineRouterProperty {
    output: BaseFilterEnginePropertyOutput;
    name: string;
}
export declare abstract class FilterEngineContext {
    componentId: string;
    constructor(componentId: string);
    isRefinable(prop: BaseFilterEngineProperty): boolean;
    getAvailableProperties(): EnterprisePropertyDefinition[];
    getAZFilterableProperties(): EnterprisePropertyColumnMapping[];
    getExcludedPropertyTypeIds(): GuidValue[];
    readonly abstract uniqueId: string;
    readonly supportFullTextSearch: boolean;
    readonly isSortableRefinementValue: boolean;
}
export declare abstract class DbQueryFilterEngineContext extends FilterEngineContext {
    componentId: string;
    readonly abstract uniqueId: string;
    constructor(componentId: string);
}
