/// <reference types="node" />
import { BaseEmitter, ICommand, IDataEvent, IExecutionResult, LoggerFacade } from '@curium.rocks/data-emitter-base';
import { IDisposable, IStatusEvent } from '@curium.rocks/data-emitter-base/build/src/dataEmitter';
export interface IScriptedEvent {
    delayToEventMs: number;
    dataEvent?: IDataEvent;
    statusEvent?: IStatusEvent;
}
export interface IScript {
    events: Array<IScriptedEvent>;
}
/**
 *
 */
export declare class ScriptedEmitter extends BaseEmitter implements IDisposable {
    static readonly TYPE = "SCRIPTED-EMITTER";
    protected script: IScript;
    protected counter: number;
    protected timeoutHandler?: ReturnType<typeof setTimeout>;
    protected lastDataEvent?: IDataEvent;
    protected lastStatusEvent?: IStatusEvent;
    /**
       *
       * @param {string} id
       * @param {string} name
       * @param {string} description
       * @param {IScript} script
       * @param {LoggerFacade?} loggerFacade
       */
    constructor(id: string, name: string, description: string, script: IScript, loggerFacade: LoggerFacade | undefined);
    /**
       *
       */
    protected next(): void;
    /**
       * Start executing the script timeline
       */
    start(): void;
    /**
       * Stop executing the script timeline
       */
    stop(): void;
    /**
       * Execute the event
       * @param {IScriptedEvent} evt
       */
    protected tick(evt: IScriptedEvent): void;
    /**
       *
       * @param {ICommand} command
       * @return {Promise<IExecutionResult>}
       */
    sendCommand(command: ICommand): Promise<IExecutionResult>;
    /**
       * @return {Promise<IStatusEvent>}
       */
    probeStatus(): Promise<IStatusEvent>;
    /**
       * @return {Promise<IDataEvent>}
       */
    probeCurrentData(): Promise<IDataEvent>;
    /**
       * @return {unknown}
       */
    getMetaData(): unknown;
    /**
       *
       * @return {unknown}
       */
    getEmitterProperties(): unknown;
    /**
       * @return {string}
       */
    getType(): string;
    /**
       *
       */
    dispose(): void;
}
