/// <reference types="node" />
import { EventEmitter } from 'events';
import { IErrorMessage, IPrintMessage } from './message';
export declare enum SendTypes {
    Batch = 0,
    ConnectionChanged = 1,
    PauseUpdate = 2,
    New = 3
}
export interface IIPCSendMessage {
    type: SendTypes;
    message: IPrintMessage | IErrorMessage | Array<IPrintMessage | IErrorMessage> | boolean | number;
}
export declare enum ReceiveTypes {
    Discard = 0,
    Pause = 1,
    Save = 2,
    Reconnect = 3,
    ChangeNumber = 4
}
export interface IIPCReceiveMessage {
    type: ReceiveTypes;
    message: boolean | string[] | number;
}
export interface IWindowProvider {
    createWindowView(): IWindowView;
}
export interface IDisposable {
    dispose(): any;
}
export interface IWindowView extends EventEmitter, IDisposable {
    postMessage(message: IIPCSendMessage): Promise<boolean>;
    handleSave(saveData: Array<IPrintMessage | IErrorMessage>): Promise<boolean>;
    addListener(event: string, listener: Function): this;
    addListener(event: 'didReceiveMessage', listener: (message: IIPCReceiveMessage) => void): this;
    addListener(event: 'didDispose', listener: () => void): this;
    addListener(event: 'windowActive', listener: () => void): this;
    on(event: string, listener: Function): this;
    on(event: 'didReceiveMessage', listener: (message: IIPCReceiveMessage) => void): this;
    on(event: 'didDispose', listener: () => void): this;
    on(event: 'windowActive', listener: () => void): this;
    emit(event: string | symbol, ...args: any[]): boolean;
    emit(event: 'didReceiveMessage', message: IIPCReceiveMessage): boolean;
    emit(event: 'didDispose'): boolean;
    emit(event: 'windowActive'): boolean;
}
export interface IRioConsole extends EventEmitter, IDisposable {
    connected: boolean;
    discard: boolean;
    stop(): void;
    startListening(): void;
    setAutoReconnect(autoReconnect: boolean): void;
    getAutoReconnect(): boolean;
    setTeamNumber(teamNumber: number): void;
    addListener(event: string, listener: Function): this;
    addListener(event: 'message', listener: (message: IIPCSendMessage) => void): this;
    addListener(event: 'connectionChanged', listener: (connected: boolean) => void): this;
    on(event: string, listener: Function): this;
    on(event: 'message', listener: (message: IIPCSendMessage) => void): this;
    on(event: 'connectionChanged', listener: (connected: boolean) => void): this;
    emit(event: string | symbol, ...args: any[]): boolean;
    emit(event: 'message', message: IPrintMessage | IErrorMessage): boolean;
    emit(event: 'connectionChanged', connected: boolean): boolean;
    disconnect(): void;
}
export interface IRioConsoleProvider {
    getRioConsole(): IRioConsole;
}
