import type { IQService } from 'angular';
import { Subject } from 'rxjs';
import type { ProviderServiceDelegate } from '../../cloudProvider';
import type { ISearchResult } from '../search.service';
import type { SearchResultType } from '../searchResult';
import { SearchStatus } from '../searchResult/SearchStatus';
export interface ISearchResultSet<T extends ISearchResult = ISearchResult> {
    type: SearchResultType;
    results: T[];
    status: SearchStatus;
    error?: any;
    query?: string;
}
export declare type ISearchResultFormatter = (entry: ISearchResult, fromRoute?: boolean) => string | PromiseLike<string>;
export interface IProviderResultFormatter {
    [category: string]: ISearchResultFormatter;
}
export declare class InfrastructureSearcher {
    private $q;
    private providerServiceDelegate;
    private deferred;
    querySubject: Subject<string>;
    constructor($q: IQService, providerServiceDelegate: ProviderServiceDelegate);
    query(q: string): PromiseLike<ISearchResultSet[]>;
    getCategoryConfig(category: string): SearchResultType;
    formatRouteResult(category: string, entry: ISearchResult): PromiseLike<string>;
    private formatResult;
}
export declare class InfrastructureSearchService {
    private $q;
    private providerServiceDelegate;
    static $inject: string[];
    constructor($q: IQService, providerServiceDelegate: any);
    getSearcher(): InfrastructureSearcher;
}
export declare const INFRASTRUCTURE_SEARCH_SERVICE = "spinnaker.infrastructure.search.service";
