import { Subject } from 'rxjs';
import type { Application } from '../../application/application.model';
import type { ICluster, IEntityTags, IInstance, IManagedResourceSummary, IServerGroup } from '../../domain';
export interface IParentGrouping {
    subgroups: IClusterSubgroup[] | IServerGroupSubgroup[];
}
export interface IClusterGroup extends IParentGrouping {
    heading: string;
    key: string;
    subgroups: IClusterSubgroup[];
    entityTags?: IEntityTags;
}
export interface IClusterSubgroup extends IParentGrouping {
    heading: string;
    key: string;
    category: string;
    cluster: ICluster;
    subgroups: IServerGroupSubgroup[];
    hasDiscovery?: boolean;
    hasLoadBalancers?: boolean;
    entityTags: IEntityTags;
    isManaged: boolean;
    managedResourceSummary?: IManagedResourceSummary;
}
export interface IServerGroupSubgroup {
    heading: string;
    key: string;
    category: string;
    serverGroups: IServerGroup[];
    entityTags: IEntityTags;
    isManaged: boolean;
    managedResourceSummary?: IManagedResourceSummary;
}
export declare type Grouping = IClusterGroup | IClusterSubgroup | IServerGroupSubgroup;
export declare class ClusterFilterService {
    groupsUpdatedStream: Subject<IClusterGroup[]>;
    private lastApplication;
    private isFilterable;
    updateClusterGroups(application?: Application): void;
    clearFilters(): void;
    shouldShowInstance(instance: IInstance): boolean;
    overrideFiltersForUrl(result: any): void;
    private filterServerGroupsForDisplay;
    private updateMultiselectInstanceGroups;
    private updateMultiselectServerGroups;
    private instanceTypeFilters;
    private instanceFilters;
    private shouldFilterInstances;
    private instanceCountFilter;
    private labelFilters;
    private textFilter;
    private addSearchField;
    private sortGroupsByHeading;
    private addHealthFlags;
    private hasDiscovery;
    private hasLoadBalancers;
    private diffSubgroups;
    private diffServerGroups;
}
