import { OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
import { CacheField } from '../cache-field';
import { ParameterCacheField } from '../parameter-cache-field';
/**
 * App-wide, top-level, 'dumb' BO cache manager service. It stores and returns simple and parameterized business object cache items.
 *
 * Several other services register cache items onto this manager, such as repositories or the more generic SelectMultipleSimpleCacheService.
 *
 * This is a dumb cache manager. It just functions as a point to add and retrieve generic cache items, but does not know how to actually
 * LOAD these cache items from the database, or what exact types the items are.
 *
 * All caches are reset when the user logs out.
 */
export declare class TransactionBusinessObjectCacheManagerService implements OnDestroy {
    readonly reset: Subject<void>;
    private static _NullBoId;
    private _selectMultipleCache;
    private _selectMultipleParameterizedCache;
    private _selectSingleCache;
    private _selectSingleParameterizedCache;
    ngOnDestroy(): void;
    /**
     * Creates and adds a new simple cache item for the given key with the given load function.
     * @param key
     * @param loadFunction e.g. () => { return this._dataService.selectMultiple(Color); }
     * @param overrideOld Whether to allow an old cache item with the same key to become override by this newly created cache item.
     * @returns The newly created cache item.
     */
    addNewSelectMultipleCacheItem<T extends Object>(key: any, loadFunction: () => Promise<T[]>, overrideOld?: boolean): CacheField<T[]>;
    addNewSelectSingleCacheItem<T extends Object>(key: {
        new (): T;
    }, id: number | string | Object, loadFunction: () => Promise<T>, overrideOld?: boolean): CacheField<T>;
    addNewSelectSingleParameterizedCacheItem<T extends Object>(key: any, loadFunction: (params?: any) => Promise<T>, overrideOld?: boolean): ParameterCacheField<T>;
    /**
     * Creates and adds a new parameterized cache item for the given key with the given load function.
     * @param key
     * @param loadFunction e.g. (category: ArticleCategory) => { return this._dataService.selectMultiple(TurnoverGroupImage, category); }
     * @param overrideOld Whether to allow an old cache item with the same key to become override by this newly created cache item.
     */
    addNewSelectMultipleParameterizedCacheItem<T extends Object>(key: any, loadFunction: (params?: any) => Promise<T[]>, overrideOld?: boolean): ParameterCacheField<T[]>;
    hasSelectMultipleCacheItem(key: any): boolean;
    hasSingleCacheItem<T extends Object>(key: {
        new (): T;
    }, id?: number | string | Object): boolean;
    hasSelectMultipleParameterizedCacheItem(key: any): boolean;
    hasSelectSingleParameterizedCacheItem(key: any): boolean;
    getSelectMultipleCacheItem<T extends Object>(key: any): CacheField<T[]>;
    getSingleCacheItem<T extends Object>(key: {
        new (): T;
    }, id?: number | string | Object): CacheField<T>;
    deleteSingleCacheItem<T extends Object>(key: {
        new (): T;
    }, id?: number | string | Object): void;
    getSelectMultipleParameterCacheItem<T extends Object>(key: any): ParameterCacheField<T[]>;
    getSelectSingleParameterCacheItem<T>(key: any): ParameterCacheField<T>;
    private _reset;
}
