import { CallSettings, CallSettingsBuilder, MainVideoContainerSetting } from "./CallSettings";
import { CallAppSettings, CallAppSettingsBuilder } from "./CallsAppSettings";
import { OngoingCallListener } from "./Listener";
import { CallConstants } from "../constants";
import { PresenterSettings, PresenterSettingsBuilder } from "./PresenterSettings";
import { ListenerHandlers } from "./ListnerHandler";
import { CallLog } from './CallLog';
import { CallLogRequestBuilder } from './CometChatCallLogs';
import { CallUser } from "./CallUser";
import { CallGroup } from "./CallGroup";
import { Participant } from './Participant';
import { Recording } from './Recording';
export declare class CometChatCalls {
    private static appSettings;
    private static inProgress;
    private static callEventListener;
    private static debounceDeviceChange;
    private static deviceList;
    static CALL_MODE: {
        readonly DEFAULT: "DEFAULT";
        readonly SPOTLIGHT: "SPOTLIGHT";
        readonly GRID: "TILE";
    };
    /**
     * Alias to CometChatCalls.CALL_MODE
     */
    static MODE: {
        readonly DEFAULT: "DEFAULT";
        readonly SPOTLIGHT: "SPOTLIGHT";
        readonly GRID: "TILE";
    };
    static addCallEventListener: typeof ListenerHandlers.addCallEventListener;
    static removeCallEventListener: typeof ListenerHandlers.removeCallEventListener;
    static OngoingCallListener: typeof OngoingCallListener;
    static CallSettingsBuilder: typeof CallSettingsBuilder;
    static CallSettings: typeof CallSettings;
    static PresenterSettingsBuilder: typeof PresenterSettingsBuilder;
    static PresenterSettings: typeof PresenterSettings;
    static CallAppSettingsBuilder: typeof CallAppSettingsBuilder;
    static CallAppSettings: typeof CallAppSettings;
    static MainVideoContainerSetting: typeof MainVideoContainerSetting;
    static CallLogRequestBuilder: typeof CallLogRequestBuilder;
    static CallLog: typeof CallLog;
    static CallUser: typeof CallUser;
    static CallGroup: typeof CallGroup;
    static Participant: typeof Participant;
    static Recording: typeof Recording;
    private static isPresenterMode;
    static joinPresentation(callToken: string, presenterSettings: PresenterSettings, htmlElement: HTMLElement): Promise<void>;
    static startSession(callToken: string, callSettings: CallSettings, htmlElement: HTMLElement): Promise<void>;
    private static startSessionCore;
    private static startTheSession;
    static generateToken(sessionID: string, authToken: string): Promise<{
        token: string;
    }>;
    static init(appSettings: CallAppSettings): Promise<void>;
    private static getRef;
    /**
     * Method to pause/unpause video stream.
     * @param {boolean} pauseVideo Defaults to true
     * @returns {void}
     */
    static pauseVideo(pauseVideo?: boolean): void;
    /**
     * Method to resume video stream. Alias to resumeVideo.
     * @returns {void}
     */
    static unPauseVideo(): void;
    /**
     * Method to resume video stream.
     * @returns {void}
     */
    static resumeVideo(): void;
    /**
     * Method to set mode.
     * @param mode
     * @returns {void}
     */
    static setMode(mode: (typeof CallConstants.MODE)[keyof typeof CallConstants.MODE]): void;
    /**
     * Method to mute/unmute audio stream.
     * @param {boolean} muteAudio Defaults to true
     * @returns {void}
     */
    static muteAudio(muteAudio?: boolean): void;
    /**
     * Method to unmute audio stream.
     * @returns {void}
     */
    static unMuteAudio(): void;
    /**
     * Method to start screen share.
     * @returns {void}
     */
    static startScreenShare(): void;
    /**
     * Method to stop screen share.
     * @returns {void}
     */
    static stopScreenShare(): void;
    static endSession(): void;
    static switchCamera(): void;
    /**
     * Method to start call recording.
     * @returns {void}
     */
    static startRecording(): void;
    /**
     * Method to stop call recording.
     * @returns {void}
     */
    static stopRecording(): void;
    /**
     * Method to switch an audio call to video call.
     * @returns {void}
     */
    static switchToVideoCall(): void;
    /**
     * Method to open the virtual background settings.
     * @returns {void}
     */
    static openVirtualBackground(): void;
    /**
     * Method to close the virtual background settings.
     * @returns {void}
     */
    static closeVirtualBackground(): void;
    /**
     * Method to set the background blur. This method takes number as input which decides the blur level of the background.
     * @param {number} blurLevel The blur level of the background
     * @returns {void}
     */
    static setBackgroundBlur(blurLevel: number): void;
    /**
     * Method to set the background image. This method takes either a URL or file Object & sets that image as the background.
     * @param image image URL or file Object
     * @returns {void}
     */
    static setBackgroundImage(image: string | Blob | Object): void;
    /**
     * Method to get all the available audio input devices.
     * @returns {MediaDeviceInfo[]}
     */
    static getAudioInputDevices(): MediaDeviceInfo[];
    /**
     * Method to get all the available audio output devices.
     * @returns {MediaDeviceInfo[]}
     */
    static getAudioOutputDevices(): MediaDeviceInfo[];
    /**
     * Method to get all the available video input devices.
     * @returns {MediaDeviceInfo[]}
     */
    static getVideoInputDevices(): MediaDeviceInfo[];
    /**
     * Method to change the audio input device.
     * @param {string} deviceId
     * @returns {void}
     */
    static setAudioInputDevice(deviceId: string): void;
    /**
     * Method to change the audio output device.
     * @param {string} deviceId
     * @returns {void}
     */
    static setAudioOutputDevice(deviceId: string): void;
    /**
     * Method to change the video input device.
     * @param {string} deviceId
     * @returns {void}
     */
    static setVideoInputDevice(deviceId: string): void;
    /**
     * Retrieves call details for a given session ID and auth token.
     * @param sessionID - The session ID of the call.
     * @param authToken - The authentication token required to make the API call.
     * @returns A Promise that resolves to a CallLog object containing the call details.
     * @throws {CometChatCallsException} If there is an error retrieving the call details.
     */
    static getCallDetails(sessionID: string, authToken: string): Promise<Array<CallLog>>;
}
