///
import { EventEmitter } from 'events';
import { IClient } from '../IClient';
import { IRawValues } from '../interfaces';
import { Method, Reply } from '../wire/packets';
import { Group } from './Group';
import { IScene, ISceneData, ISceneDataArray } from './interfaces';
import { IControl } from './interfaces/controls/IControl';
import { IGroup, IGroupDataArray } from './interfaces/IGroup';
import { IParticipant } from './interfaces/IParticipant';
export interface IState extends EventEmitter {
setClient(client: IClient): void;
processMethod(method: Method): void | Reply;
synchronizeLocalTime(time?: Date | number): Date;
synchronizeRemoteTime(time?: Date | number): Date;
reset(): void;
getGroups(): Map;
getGroup(id: string): IGroup;
getScenes(): Map;
getScene(id: string): IScene;
onSceneCreate(data: ISceneData): IScene;
synchronizeScenes(data: ISceneDataArray): IScene[];
synchronizeGroups(data: IGroupDataArray): IGroup[];
onWorldUpdate(data: IRawValues): void;
getControl(id: string): IControl;
getParticipants(): Map;
getParticipantByUserID(id: number): IParticipant;
getParticipantByUsername(name: string): IParticipant;
getParticipantBySessionID(id: string): IParticipant;
/**
* Fired when the ready state of the interactive session changes.
*/
on(event: 'ready', listener: (ready: boolean) => void): this;
/**
* Fired when the connected participant's state is updated
*/
on(event: 'selfUpdate', listener: (self: IParticipant) => void): this;
/**
* Fired when a participant joins.
*/
on(event: 'participantJoin', listener: (participant: IParticipant) => void): this;
/**
* Fired when a participant leaves.
*/
on(event: 'participantLeave', listener: (participantSessionID: string, participant: IParticipant) => void): this;
/**
* Fired when a scene is deleted.
*/
on(event: 'sceneDeleted', listener: (sceneID: string, reassignSceneID: string) => void): this;
/**
* Fired when a scene is created.
*/
on(event: 'sceneCreated', listener: (scene: IScene) => void): this;
/**
* Fired when a group is deleted.
*/
on(event: 'groupDeleted', listener: (groupID: string, reassignGroupID: string) => void): this;
/**
* Fired when a group is created.
*/
on(event: 'groupCreated', listener: (group: Group) => void): this;
/**
* Fired when the world is updated.
*/
on(event: 'worldUpdated', listener: (world: IRawValues) => void): this;
on(event: string, listener: Function): this;
}