/// <reference types="node" />
import { EventEmitter } from 'events';
import BsViewableImpressionObserver from './ViewableImpressionObserver';
import { Dataset, IImpressionManager, ImpressionEventType, ViewableImpressionOptions } from './typings';
declare interface ViewableImpressionEngine {
    on<U extends keyof BsViewableImpressionManagerEvents>(event: U, listener: BsViewableImpressionManagerEvents[U]): this;
    emit<U extends keyof BsViewableImpressionManagerEvents>(event: U, ...args: Parameters<BsViewableImpressionManagerEvents[U]>): boolean;
}
interface BsViewableImpressionManagerEvents {
    [ImpressionEventType.Impression]: (item: Dataset) => void;
}
declare class ViewableImpressionEngine extends EventEmitter implements IImpressionManager {
    private alreadyVisibleImpressed;
    private pendingImpressions;
    private impressionObserver;
    private containerClassname;
    private itemClassname;
    private appData;
    private options;
    constructor(impressionObserver: BsViewableImpressionObserver, options: Partial<ViewableImpressionOptions>);
    triggerPendingImpressions(): void;
    start(containerClassname: any, itemClassname: any, appData: any): void;
    stop(): void;
    restart(appData: any): void;
    add(id: any, data: Dataset): void;
    remove(id: any): void;
}
export default ViewableImpressionEngine;
