import { ConversationRecognizer, IInternalConversation, TranscriberRecognizer } from "../../common.speech/Exports.js";
import { IDisposable } from "../../common/Exports.js";
import { Participant, PropertyCollection, SpeechTranslationConfig } from "../Exports.js";
import { Callback, MeetingInfo, IMeeting } from "./IMeeting.js";
import { IParticipant, IUser } from "./IParticipant.js";
export declare abstract class Meeting implements IMeeting {
    protected constructor();
    abstract get authorizationToken(): string;
    abstract get config(): SpeechTranslationConfig;
    abstract get meetingId(): string;
    abstract get meetingInfo(): MeetingInfo;
    abstract get properties(): PropertyCollection;
    abstract get speechRecognitionLanguage(): string;
    abstract get participants(): Participant[];
    abstract set authorizationToken(value: string);
    abstract get isConnected(): boolean;
    /**
     * Create a meeting
     * @param speechConfig
     * @param meetingId
     * @param cb
     * @param err
     */
    static createMeetingAsync(speechConfig: SpeechTranslationConfig, meetingId: string, arg3?: Callback, arg4?: Callback): Meeting;
    /** Start a meeting. */
    abstract startMeetingAsync(cb?: Callback, err?: Callback): void;
    /** Delete a meeting. After this no one will be able to join the meeting. */
    abstract deleteMeetingAsync(cb?: Callback, err?: Callback): void;
    /** End a meeting. */
    abstract endMeetingAsync(cb?: Callback, err?: Callback): void;
    /** Lock a meeting. This will prevent new participants from joining. */
    abstract lockMeetingAsync(cb?: Callback, err?: Callback): void;
    /** Add Participant to Meeting. */
    abstract addParticipantAsync(participant: IParticipant, cb?: Callback, err?: Callback): void;
    /**
     * Mute all other participants in the Meeting. After this no other participants will
     * have their speech recognitions broadcast, nor be able to send text messages.
     */
    abstract muteAllParticipantsAsync(cb?: Callback, err?: Callback): void;
    /**
     * Mute a participant.
     * @param userId A user identifier
     */
    abstract muteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void;
    /**
     * Remove a participant from a meeting using the user id, Participant or User object
     * @param userId A user identifier
     */
    abstract removeParticipantAsync(userId: string | IParticipant | IUser, cb?: Callback, err?: Callback): void;
    /** Unlocks a meeting. */
    abstract unlockMeetingAsync(cb?: Callback, err?: Callback): void;
    /** Unmute all other participants in the meeting. */
    abstract unmuteAllParticipantsAsync(cb?: Callback, err?: Callback): void;
    /**
     * Unmute a participant.
     * @param userId A user identifier
     */
    abstract unmuteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void;
}
export declare class MeetingImpl extends Meeting implements IDisposable {
    private privConfig;
    private privProperties;
    private privLanguage;
    private privToken;
    private privIsDisposed;
    private privRoom;
    private privManager;
    private privConversationRecognizer;
    private privIsConnected;
    private privParticipants;
    private privIsReady;
    private privConversationTranslator;
    private privTranscriberRecognizer;
    private privErrors;
    private privConversationId;
    private readonly privTextMessageMaxLength;
    /**
     * Create a Meeting impl
     * @param speechConfig
     * @param {string} id - optional conversationId
     */
    constructor(speechConfig: SpeechTranslationConfig, id: string);
    get room(): IInternalConversation;
    get connection(): ConversationRecognizer;
    get config(): SpeechTranslationConfig;
    get meetingId(): string;
    get properties(): PropertyCollection;
    get speechRecognitionLanguage(): string;
    get isMutedByHost(): boolean;
    get isConnected(): boolean;
    get participants(): Participant[];
    get me(): Participant;
    get host(): Participant;
    get transcriberRecognizer(): TranscriberRecognizer;
    get meetingInfo(): MeetingInfo;
    private get canSend();
    private get canSendAsHost();
    get authorizationToken(): string;
    set authorizationToken(value: string);
    /**
     * Create a new meeting as Host
     * @param cb
     * @param err
     */
    createMeetingAsync(cb?: Callback, err?: Callback): void;
    /**
     * Starts a new meeting as host.
     * @param cb
     * @param err
     */
    startMeetingAsync(cb?: Callback, err?: Callback): void;
    /**
     * Join a meeting as a participant.
     * @param { IParticipant } participant - participant to add
     * @param cb
     * @param err
     */
    addParticipantAsync(participant: IParticipant, cb?: Callback, err?: Callback): void;
    /**
     * Join a meeting as a participant.
     * @param meeting
     * @param nickname
     * @param lang
     * @param cb
     * @param err
     */
    joinMeetingAsync(meetingId: string, nickname: string, lang: string, cb?: Callback, err?: Callback): void;
    /**
     * Deletes a meeting
     * @param cb
     * @param err
     */
    deleteMeetingAsync(cb?: Callback, err?: Callback): void;
    deleteMeetingImplAsync(): Promise<void>;
    /**
     * Issues a request to close the client websockets
     * @param cb
     * @param err
     */
    endMeetingAsync(cb?: Callback, err?: Callback): void;
    endMeetingImplAsync(): Promise<void>;
    /**
     * Issues a request to lock the conversation
     * @param cb
     * @param err
     */
    lockMeetingAsync(cb?: Callback, err?: Callback): void;
    /**
     * Issues a request to mute the meeting
     * @param cb
     * @param err
     */
    muteAllParticipantsAsync(cb?: Callback, err?: Callback): void;
    /**
     * Issues a request to mute a participant in the meeting
     * @param userId
     * @param cb
     * @param err
     */
    muteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void;
    /**
     * Issues a request to remove a participant from the conversation
     * @param userId
     * @param cb
     * @param err
     */
    removeParticipantAsync(userId: string | IParticipant | IUser, cb?: Callback, err?: Callback): void;
    /**
     * Issues a request to unlock the meeting
     * @param cb
     * @param err
     */
    unlockMeetingAsync(cb?: Callback, err?: Callback): void;
    /**
     * Issues a request to unmute all participants in the meeting
     * @param cb
     * @param err
     */
    unmuteAllParticipantsAsync(cb?: Callback, err?: Callback): void;
    /**
     * Issues a request to unmute a participant in the meeting
     * @param userId
     * @param cb
     * @param err
     */
    unmuteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void;
    /**
     * Send a text message
     * @param message
     * @param cb
     * @param err
     */
    sendTextMessageAsync(message: string, cb?: Callback, err?: Callback): void;
    /**
     * Set translated to languages
     * @param {string[]} languages - languages to translate to
     * @param cb
     * @param err
     */
    setTranslatedLanguagesAsync(languages: string[], cb?: Callback, err?: Callback): void;
    /**
     * Change nickname
     * @param {string} nickname - new nickname for the room
     * @param cb
     * @param err
     */
    changeNicknameAsync(nickname: string, cb?: Callback, err?: Callback): void;
    isDisposed(): boolean;
    dispose(): void;
    connectTranscriberRecognizer(recognizer: TranscriberRecognizer): Promise<void>;
    getKeepAlive(): string;
    /** websocket callbacks */
    private onConnected;
    private onDisconnected;
    private onCanceled;
    private onParticipantUpdateCommandReceived;
    private onLockRoomCommandReceived;
    private onMuteAllCommandReceived;
    private onParticipantJoinCommandReceived;
    private onParticipantLeaveCommandReceived;
    private onTranslationReceived;
    private onParticipantsListReceived;
    private onConversationExpiration;
    private addParticipantImplAsync;
    private removeParticipantImplAsync;
    private close;
    /** Helpers */
    private handleCallback;
    private handleError;
    /** Participant Helpers */
    private toParticipants;
    private toParticipant;
    private getMuteAllCommand;
    private getMuteCommand;
    private getLockCommand;
    private getEjectCommand;
    private getSetTranslateToLanguagesCommand;
    private getChangeNicknameCommand;
    private getMessageCommand;
}
