///
import { EventEmitter } from 'events';
import { ClientType } from './Client';
import { InteractiveError } from './errors';
import { IControl, IGroupDataArray, IGroupDeletionParams, IInput, IParticipantArray, ISceneControlDeletion, ISceneData, ISceneDataArray, ISceneDeletionParams } from './state/interfaces';
import { IState } from './state/IState';
export interface IClient extends EventEmitter {
clientType: ClientType;
state: IState;
execute(method: string, params: T, discard: boolean): Promise;
ready(isReady: boolean): Promise;
createControls(controls: ISceneData): Promise;
createGroups(groups: IGroupDataArray): Promise;
createScene(scene: ISceneData): Promise;
createScenes(scenes: ISceneDataArray): Promise;
updateControls(controls: ISceneData): Promise;
updateGroups(groups: IGroupDataArray): Promise;
deleteControls(controls: ISceneControlDeletion): Promise;
deleteGroup(data: IGroupDeletionParams): Promise;
deleteScene(data: ISceneDeletionParams): Promise;
updateScenes(scenes: ISceneDataArray): Promise;
updateParticipants(participants: IParticipantArray): Promise;
giveInput(_: T): Promise;
getTime(): Promise;
on(event: 'open', listener: () => void): this;
on(event: 'send', listener: (payload: string) => void): this;
on(event: 'message', listener: (payload: string) => void): this;
on(event: 'error', listener: (err: InteractiveError.Base) => void): this;
on(event: 'hello', listener: () => void): this;
on(event: string, listener: Function): this;
}