import type { ConferenceStatus } from '@voxeet/voxeet-web-sdk/types/models/Conference';
import type Conference from '@voxeet/voxeet-web-sdk/types/models/Conference';
import type ConferenceOptions from '@voxeet/voxeet-web-sdk/types/models/ConferenceOptions';
import type { MediaStreamWithType } from '@voxeet/voxeet-web-sdk/types/models/MediaStream';
import type { JoinOptions, ParticipantInfo } from '@voxeet/voxeet-web-sdk/types/models/Options';
import type { Participant } from '@voxeet/voxeet-web-sdk/types/models/Participant';
import React, { ReactNode } from 'react';
import { BlockedAudioState } from '../hooks/types/Audio';
import { Status } from '../hooks/types/misc';
import type { Notification, NotificationBase } from '../hooks/types/Notifications';
import type { ParticipantStatus } from '../hooks/types/Participants';
import type { ScreenShare } from '../hooks/types/ScreenShare';
declare type ScreenShareStatusType = {
    owner: Participant | null;
    stream: MediaStreamWithType | null;
    status: ScreenShare['status'];
    isPendingTakeoverRequest: boolean;
    isPresentationModeActive: boolean;
};
declare type MessageData = {
    sender: Participant | null;
    message: string | null;
};
declare type RecordingDataType = {
    ownerId: string | null;
    timestamp: number | null;
    status: Status;
    isRecordingModeActive: boolean;
};
export declare type CommsContextType = {
    openSession: (participantInfo: ParticipantInfo) => Promise<void>;
    closeSession: () => Promise<void>;
    createConference: (options: ConferenceOptions) => Promise<Conference>;
    fetchConference: (id: string) => Promise<Conference>;
    joinConference: (conference: Conference, options: JoinOptions) => Promise<Conference>;
    leaveConference: () => Promise<void>;
    toggleAudio: () => Promise<void>;
    isAudio: boolean;
    toggleVideo: () => Promise<void>;
    playBlockedAudio: () => Promise<void>;
    isVideo: boolean;
    startParticipantAudio: (participant: Participant) => Promise<void>;
    stopParticipantAudio: (participant: Participant) => Promise<void>;
    startRemoteParticipantVideo: (participant: Participant) => Promise<void>;
    stopRemoteParticipantVideo: (participant: Participant) => Promise<void>;
    participant: Participant | null;
    conference: Conference | null;
    conferenceStatus: ConferenceStatus | null;
    participants: Participant[];
    participantsStatus: {
        [key: string]: ParticipantStatus;
    };
    prevConference: {
        participant: string;
        name: string;
    } | null;
    addIsSpeakingListener: (participant: Participant) => () => void;
    resetVideo: () => void;
    resetAudio: () => void;
    localCamera: Partial<MediaDeviceInfo> | null;
    setLocalCamera: React.Dispatch<React.SetStateAction<Partial<MediaDeviceInfo> | null>>;
    localMicrophone: Partial<MediaDeviceInfo> | null;
    setLocalMicrophone: React.Dispatch<React.SetStateAction<Partial<MediaDeviceInfo> | null>>;
    localSpeakers: Partial<MediaDeviceInfo> | null;
    setLocalSpeakers: React.Dispatch<React.SetStateAction<Partial<MediaDeviceInfo> | null>>;
    blockedAudioState: BlockedAudioState;
    setBlockedAudioState: React.Dispatch<React.SetStateAction<BlockedAudioState>>;
    isPageMuted: boolean;
    toggleMuteParticipants: () => void;
    startScreenShare: () => Promise<boolean>;
    stopScreenShare: () => Promise<void>;
    screenShareStatus: ScreenShareStatusType;
    recordingData: RecordingDataType;
    setSharingErrors: (error?: ErrorCodes) => void;
    setRecordingErrors: (error?: ErrorCodes) => void;
    showNotification: (notification: NotificationBase) => void;
    notifications: Notification[];
    removeNotification: (notificationId: number) => void;
    screenShareErrorMessages: ErrorCodes[];
    recordingErrorMessages: ErrorCodes[];
    sendMessage: (message: string) => Promise<void>;
    messageData: MessageData;
    clearMessage: () => void;
    setPendingTakeoverRequest: (pendingTakeoverRequest: boolean) => void;
    resetScreenShareStatus: () => void;
    resetRecordingData: () => void;
    errors: Errors;
    stopRecording: () => Promise<boolean>;
    startRecording: () => Promise<boolean>;
    removeSdkErrors: (error?: ErrorCodes) => void;
    hasCameraPermission: boolean;
    hasMicrophonePermission: boolean;
    setHasCameraPermission: React.Dispatch<React.SetStateAction<boolean>>;
    setHasMicrophonePermission: React.Dispatch<React.SetStateAction<boolean>>;
    startBackgroundBlur: () => void;
    stopVideoProcessing: () => void;
    isBlurred: boolean;
    setIsBlurred: React.Dispatch<React.SetStateAction<boolean>>;
};
export declare type CommsProviderProps = {
    children: ReactNode;
    /**
     * Client access token to use to initialize the SDK.
     */
    token: string;
    /**
     * Function to use to refresh the client access token.
     */
    refreshToken?: () => Promise<string>;
    /**
     * Prop to overwrite CommsProvider value.
     */
    value?: Partial<CommsContextType>;
    /**
     * Prop to set VoxeetSDK packageUrlPrefix value.
     */
    packageUrlPrefix?: string;
};
export declare const CommsContext: React.Context<CommsContextType>;
export declare type Errors = {
    recordingErrors: ErrorCodes[];
    screenShareErrors: ErrorCodes[];
    sdkErrors: Partial<Record<ErrorCodes, boolean>>;
};
export declare enum ErrorCodes {
    'PermissionDeniedBySystem' = "Permission denied by system",
    'PermissionDeniedBySystemMozilla' = "The object can not be found here.",
    'LackOfBrowserPermissionsChrome' = "Permission denied",
    'LackOfBrowserPermissionsMozilla' = "The request is not allowed by the user agent or the platform in the current context.",
    'LackOfBrowserPermissionsSafari' = "The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.",
    'LackOfBrowserPermissions' = "Lack of browser permissions",
    'ScreenShareAutoTakeoverErrorSafari' = "getDisplayMedia must be called from a user gesture handler.",
    'ScreenShareAutoTakeoverErrorMozilla' = "getDisplayMedia requires transient activation from a user gesture.",
    'ScreenShareAutoTakeoverError' = "Screen share auto takeover error",
    'ScreenShareAlreadyInProgress' = "ScreenShare already in progress",
    'IncorrectSession' = "Incorrect participant session",
    'PeerConnectionDisconnectedError' = "PeerConnectionDisconnectedError"
}
export declare const errorMapper: (error: unknown) => ErrorCodes.PermissionDeniedBySystem | ErrorCodes.LackOfBrowserPermissions | ErrorCodes.ScreenShareAutoTakeoverError | ErrorCodes.ScreenShareAlreadyInProgress | undefined;
declare const CommsProvider: ({ children, token, refreshToken, value, packageUrlPrefix }: CommsProviderProps) => import("@emotion/react/jsx-runtime").JSX.Element;
export default CommsProvider;
