import { SolrResponse } from './Data';
import { FacetValue } from '../component/facet/FacetTypes';
declare enum UrlParams {
    ID = "id",
    QUERY = "query",
    FQ = "fq",
    START = "start",
    TYPE = "type",
    HL = "highlight",
}
interface SavedSearch {
    type?: 'QUERY' | 'MLT' | 'DETAILS';
    query?: string;
    boost?: string;
    sort?: string[];
    facets?: {
        [key: string]: string[];
    };
}
interface SearchParams extends SavedSearch {
    start?: number;
}
declare type QueryParam = string | number;
declare type NamespacedUrlParam = [UrlParams, QueryParam];
declare type UrlFragment = [UrlParams | NamespacedUrlParam, QueryParam | [string, QueryParam[]]] | null;
declare class QueryBeingBuilt {
    solrUrlFragment: string;
    appUrlFragment: UrlFragment;
    constructor(solrUrlFragment: string, appUrlFragment: UrlFragment);
}
declare class SolrQueryBuilder<T> {
    searchResponse?: SolrResponse<T>;
    previous?: SolrQueryBuilder<T>;
    op: () => QueryBeingBuilt;
    constructor(op: () => QueryBeingBuilt, previous?: SolrQueryBuilder<T>);
    get(id: QueryParam): SolrQueryBuilder<T>;
    select(): SolrQueryBuilder<T>;
    moreLikeThis(handler: string, col: string, id: QueryParam, props: MoreLikeThisProps): SolrQueryBuilder<T>;
    start(start: number): SolrQueryBuilder<T>;
    jsonp(callback: string): SolrQueryBuilder<T>;
    export(): SolrQueryBuilder<T>;
    qt(qt: string): SolrQueryBuilder<T>;
    q(searchFields: string[], value: QueryParam): SolrQueryBuilder<T>;
    bq(query: string): SolrQueryBuilder<T>;
    fq(field: string, values: QueryParam[]): SolrQueryBuilder<T>;
    highlight(query: HighlightQuery): SolrQueryBuilder<T> | null;
    fl(fields: QueryParam[]): SolrQueryBuilder<T>;
    requestFacet(field: string): SolrQueryBuilder<T>;
    rows(rows: number): SolrQueryBuilder<T>;
    sort(fields: string[]): SolrQueryBuilder<T>;
    schema(): SolrQueryBuilder<T>;
    construct(): [string, Array<UrlFragment>];
    buildCurrentParameters(): SearchParams;
    buildSolrUrl(): string;
}
interface PaginationData {
    numFound: number;
    start: number;
    pageSize: number;
}
declare type QueryEvent<T> = (object: T[], paging: PaginationData) => void;
declare type FacetEvent = (object: FacetValue[]) => void;
declare type ErrorEvent = (error: object) => void;
declare type GetEvent<T> = (object: T) => void;
declare type MoreLikeThisEvent<T> = (object: T[]) => void;
interface SolrGet<T> {
    doGet: (id: string | number) => void;
    onGet: (cb: GetEvent<T>) => void;
}
interface SolrUpdate {
    doUpdate: (id: string | number, attr: string, value: string) => void;
}
interface SolrQuery<T> {
    doQuery: (q: GenericSolrQuery) => void;
    doExport: (q: GenericSolrQuery) => void;
    onQuery: (cb: QueryEvent<T>) => void;
    registerFacet: (facet: string[]) => (cb: FacetEvent) => void;
    refine: (q: GenericSolrQuery) => SolrQuery<T>;
}
interface SolrHighlight<T> {
    onHighlight: (cb: QueryEvent<T>) => void;
}
interface SolrMoreLikeThis<T> {
    doMoreLikeThis: (id: string | number, props: MoreLikeThisProps) => void;
    onMoreLikeThis: (cb: MoreLikeThisEvent<T>) => void;
}
interface SolrTransitions {
    clearEvents: () => void;
    getCoreConfig: () => SolrConfig;
    getNamespace: () => string;
    getCurrentParameters: () => SearchParams;
    stateTransition: (v: SearchParams) => void;
}
declare type SolrSchemaFieldDefinition = {
    type: string;
    schema: string;
    dynamicBase: string;
    docs: number;
};
declare type SolrSchemaDefinition = {
    responseHeader: {
        status: number;
        QTime: number;
    };
    index: {
        numDocs: number;
        maxDoc: number;
        deletedDocs: number;
        indexHeapUsageBytes: number;
        version: number;
        segmentCount: number;
        current: boolean;
        hasDeletions: boolean;
        directory: string;
        segmentsFile: string;
        segmentsFileSizeInBytes: number;
        userData: {
            commitTimeMSec: string;
            commitCommandVer: string;
        };
        lastModified: string;
    };
    fields: {
        [key: string]: SolrSchemaFieldDefinition;
    };
    info: object;
};
interface SolrSchema {
    getSchema: () => SolrSchemaDefinition;
}
interface GenericSolrQuery {
    query: string;
    boost?: string;
    sort?: string[];
    rows?: number;
}
interface HighlightQuery {
    method?: 'unified' | 'original' | 'fastVector' | 'postings';
    fields: string[];
    query?: string;
    qparser?: string;
    requireFieldMatch?: boolean;
    usePhraseHighlighter?: boolean;
    highlightMultiTerm?: boolean;
    snippets?: number;
    fragsize?: number;
    pre?: string;
    post?: string;
    encoder?: string;
    maxAnalyzedChars?: number;
}
interface SolrConfig {
    url: string;
    core: string;
    primaryKey: string;
    defaultSearchFields: string[];
    fields: string[];
    pageSize: number;
    prefix: string;
    fq?: [string, string];
    qt?: string;
}
interface MoreLikeThisProps {
    fl: string[];
    mintf: number;
    mindf: number;
    maxdf: number;
    minwl: number;
    maxwl: number;
    maxqt: number;
    maxntp: number;
    boost: number;
    qf: string[];
}
declare class SolrCore<T> implements SolrTransitions {
    solrConfig: SolrConfig;
    private events;
    private currentParameters;
    private query?;
    private getCache;
    private mltCache;
    private refinements;
    constructor(solrConfig: SolrConfig);
    clearEvents(): void;
    getCoreConfig(): SolrConfig;
    onQuery(op: QueryEvent<T>): void;
    refine(query: GenericSolrQuery): SolrCore<T>;
    registerFacet(facetNames: string[]): (cb: FacetEvent) => void;
    onError(op: ErrorEvent): void;
    doMoreLikeThis(id: string | number, mltProps: MoreLikeThisProps): void;
    getNamespace(): string;
    prefetchMoreLikeThis(id: string | number, mltProps: MoreLikeThisProps, prefetch: boolean): void;
    onMoreLikeThis(op: (v: T[]) => void): void;
    onGet(op: GetEvent<T>): void;
    doGet(id: string | number): void;
    doQuery(desiredQuery: GenericSolrQuery, cb?: (qb: SolrQueryBuilder<{}>) => SolrQueryBuilder<{}>): void;
    doUpdate(id: string | number, attr: string, value: string): void;
    doExport(): void;
    next(op: (event: SolrQueryBuilder<T>) => SolrQueryBuilder<T>): void;
    stateTransition(newState: SearchParams): void;
    getCurrentParameters(): SearchParams;
}
declare class DataStore {
    cores: {
        [keys: string]: SolrCore<object>;
    };
    clearEvents(): void;
    registerCore<T extends object>(config: SolrConfig): SolrCore<T>;
}
declare class AutoConfiguredDataStore extends DataStore {
    private core;
    private facets;
    private fields;
    getCore(): SolrCore<object> & SolrGet<object> & SolrQuery<object>;
    getFacets(): string[];
    getFields(): string[];
    autoconfigure<T extends object>(config: SolrConfig, complete: () => void, useFacet: (facet: string) => boolean): void;
}
declare type SingleComponent<T> = (data: T, index?: number) => object | null | undefined;
export { MoreLikeThisProps, ErrorEvent, UrlParams, QueryParam, HighlightQuery, NamespacedUrlParam, UrlFragment, PaginationData, SavedSearch, SearchParams, QueryBeingBuilt, SolrQueryBuilder, SingleComponent, MoreLikeThisEvent, GetEvent, GenericSolrQuery, QueryEvent, FacetEvent, SolrConfig, SolrGet, SolrUpdate, SolrMoreLikeThis, SolrQuery, SolrHighlight, SolrTransitions, SolrCore, SolrSchemaFieldDefinition, SolrSchemaDefinition, SolrSchema, DataStore, AutoConfiguredDataStore };
