import { EventEmitter } from "events";
import { Logger } from "../common/Logger";
import { Core } from "../Core";
import { GenericService } from "./GenericService";
import { Webinar } from "../common/models/webinar";
export {};
declare class WebinarsService extends GenericService {
    private avatarDomain;
    private readonly _protocol;
    private readonly _host;
    private readonly _port;
    private _webinars;
    private webinarEventHandler;
    private webinarHandlerToken;
    static getClassName(): string;
    getClassName(): string;
    static getAccessorName(): string;
    getAccessorName(): string;
    constructor(_core: Core, _eventEmitter: EventEmitter, _http: any, _logger: Logger, _startConfig: {
        start_up: boolean;
        optional: boolean;
    });
    start(_options: any): Promise<unknown>;
    stop(): Promise<unknown>;
    init(useRestAtStartup: boolean): Promise<void>;
    attachHandlers(): void;
    LIST_EVENT_TYPE: {
        ADD: {
            code: number;
            label: string;
        };
        UPDATE: {
            code: number;
            label: string;
        };
        REMOVE: {
            code: number;
            label: string;
        };
        DELETE: {
            code: number;
            label: string;
        };
        SUBSCRIBE: {
            code: number;
            label: string;
        };
        UNSUBSCRIBE: {
            code: number;
            label: string;
        };
        CREATE: {
            code: number;
            label: string;
        };
    };
    onCreateWebinar(webinarInfo: {
        id: string;
    }): Promise<void>;
    private onDeleteWebinar;
    /**
     * @name getWebinarFromCache
     * @private
     * @category Webinars Utils
     * @param {string} webinarId
     * @description
     *      GET A CHANNEL FROM CACHE <br>
     */
    private getWebinarFromCache;
    private addOrUpdateWebinarToCache;
    private removeWebinarFromCache;
    /**
     * @public
     * @nodered true
     * @method createWebinar
     * @since 2.3.0
     * @instance
     * @category Webinars
     * @description
     *  Create a webinar (2 rooms are used for it).<br>
     * @param {string} name The name of the bubble to create.
     * @param {string} subject Webinar subject.
     * @param {Date} waitingRoomStartDate Waiting room start date UTC format.
     * @param {Date} webinarStartDate Webinar start date UTC format.
     * @param {Date} webinarEndDate Webinar end date UTC format.
     * @param {Array<Date>} reminderDates Up to 10 webinar reminder dates UTC format.
     * @param {string} timeZone Webinar time zone. If none, user time zone will be used.
     * @param {boolean} register=true Is participant registration required for webinar? Default value : true.
     * @param {string} approvalRegistrationMethod="automatic" Participants approval method. If 'manual` is selected, webinar creator can choose to manually approve or reject participants. default value : automatic. Possible values : manual, automatic.
     * @param {boolean} passwordNeeded=true If true, a password is needed when joining the webinar. This password is included in the registration confirmation email. Default value : true.
     * @param {boolean} isOrganizer=false If true, webinar creator is also an organizer. Default value : false.
     * @param {Array<string>} waitingRoomMultimediaURL Up to 5 URL of media to broadcast in the waiting room.
     * @param {string} stageBackground Free field used for customization (for example a file descriptor unique identifier).
     * @param {string} chatOption="participant" Define how participants can chat with organizers. Default value : participant. Possible values : participant, visitor, private.
     * @async
     * @return {Promise<any, ErrorManager>}
    
     */
    createWebinar(name: string, subject: string, waitingRoomStartDate: Date, webinarStartDate: Date, webinarEndDate: Date, reminderDates: Array<Date>, timeZone: string, register: boolean, approvalRegistrationMethod: string, passwordNeeded: boolean, isOrganizer: boolean, waitingRoomMultimediaURL: Array<string>, stageBackground: string, chatOption?: string): Promise<unknown>;
    /**
     * @public
     * @nodered true
     * @method updateWebinar
     * @since 2.3.0
     * @category Webinars
     * @instance
     * @description
     *  Update a webinar.<br>
     * @param {string} webinarId Webinar identifier.
     * @param {string} name The name of the bubble to create.
     * @param {string} subject Webinar subject.
     * @param {Date} waitingRoomStartDate Waiting room start date UTC format.
     * @param {Date} webinarStartDate Webinar start date UTC format.
     * @param {Date} webinarEndDate Webinar end date UTC format.
     * @param {Array<Date>} reminderDates Up to 10 webinar reminder dates UTC format.
     * @param {string} timeZone Webinar time zone. If none, user time zone will be used.
     * @param {boolean} register Is participant registration required for webinar?
     * @param {string} approvalRegistrationMethod Participants approval method. If 'manual` is selected, webinar creator can choose to manually approve or reject participants. Possible values : manual, automatic.
     * @param {boolean} passwordNeeded If true, a password is needed when joining the webinar. This password is included in the registration confirmation email.
     * @param {boolean} lockRegistration Turn off registration for webinar before it starts.
     * @param {Array<string>} waitingRoomMultimediaURL Up to 5 URL of media to broadcast in the waiting room.
     * @param {string} stageBackground Free field used for customization (for example a file descriptor unique identifier).
     * @param {string} chatOption Define how participants can chat with organizers. Default value : participant. Possible values : participant, visitor, private.
     * @async
     * @return {Promise<any, ErrorManager>}
     */
    updateWebinar(webinarId: string, name: string, subject: string, waitingRoomStartDate: Date, webinarStartDate: Date, webinarEndDate: Date, reminderDates: Array<Date>, timeZone: string, register: boolean, approvalRegistrationMethod: string, passwordNeeded: boolean, lockRegistration: boolean, waitingRoomMultimediaURL: Array<string>, stageBackground: string, chatOption: string): Promise<unknown>;
    /**
     * @public
     * @nodered true
     * @method getWebinarData
     * @since 2.3.0
     * @instance
     * @category Webinars
     * @description
     *  Get data for a given webinar.<br>
     * @param {string} webinarId Webinar identifier.
     * @async
     * @return {Promise<any, ErrorManager>}
    
     */
    getWebinarData(webinarId: string): Promise<unknown>;
    /**
     * @public
     * @nodered true
     * @method getWebinarsData
     * @instance
     * @category Webinars
     * @since 2.3.0
     * @description
     *  Get data for webinars where requester is creator, organizer, speaker and/or participant.<br>
     * @param {string} role filter. Possible values : creator, organizer, speaker, participant
     * @async
     * @return {Promise<any, ErrorManager>}
     */
    getWebinarsData(role: string): Promise<unknown>;
    /**
     * @public
     * @nodered true
     * @method fetchMyWebinars
     * @since 2.3.0
     * @instance
     * @async
     * @category Webinars
     * @param {boolean} forceServerSearch Boolean to force the get of webinars's informations from server.
     * @description
     *    Get the webinars you own.<br>
     *    Return a promise. <br>
     * @return {Promise<Webinar[]>} Return Promise
     */
    fetchMyWebinars(forceServerSearch?: boolean): Promise<Webinar[]>;
    /**
     * @public
     * @nodered true
     * @method warnWebinarModerators
     * @since 2.3.0
     * @instance
     * @category Webinars
     * @description
     *  When main speakers and organizers are selected, it's time to warn each of them to join the practice room. when some webinar information change such as:<br>
     *  As a result, moderatorsSelectedAnNotified boolean is set to true.<br>
     * @param {string} webinarId Webinar unique identifier. <br>
     * Notes:<br>
     * API Call Mandatory before publishing the webinar event:<br>
     *  The webinar can't be published if webinar moderators are not warned prior.<br>
     *  see API publishAWebinarEvent<br>
     * @async
     * @return {Promise<any, ErrorManager>}
    
     */
    warnWebinarModerators(webinarId: string): Promise<unknown>;
    /**
     * @public
     * @nodered true
     * @method publishAWebinarEvent
     * @since 2.3.0
     * @instance
     * @category Webinars
     * @description
     *  When main information about the webinar event are decided, it's up to open participant registration and allow automatic email sent when some webinar information change such as:<br>
     *  cancellation<br>
     *  date changes<br>
     *  speakers added or removed<br>
     *  As a result, emailNotification boolean is set to true. This boolean is checked when a participant try to submit a registration earlier. See API POST /api/rainbow/webinar/v1.0/webinars/self-register<br>
     * @param {string} webinarId Webinar unique identifier. <br>
     * @async
     * @return {Promise<any, ErrorManager>}
    
     */
    publishAWebinarEvent(webinarId: string): Promise<unknown>;
    /**
     * @public
     * @nodered true
     * @method deleteWebinar
     * @since 2.3.0
     * @category Webinars
     * @instance
     * @description
     *  Delete a webinar.<br>
     * @param {string} webinarId Webinar unique identifier. <br>
     * @async
     * @return {Promise<any, ErrorManager>}
     */
    deleteWebinar(webinarId: string): Promise<unknown>;
}
export { WebinarsService as WebinarsService };
