import { MutableRefObject } from 'react';
import { MediaDevice, VideoPlayer } from '@zoom/videosdk';

export type VirtualBackgroundMode = 'none' | 'blur' | 'image';
export type CustomBackgroundImage = {
    id: string;
    url: string;
};
export type VirtualBackgroundState = {
    mode: VirtualBackgroundMode;
    customImages: CustomBackgroundImage[];
    activeCustomImageId: string | null;
};
export type BrowserPermissionState = 'granted' | 'denied' | 'prompt' | 'unknown';
export type PinnedVideoAttachmentOwner = `pinned-view:grid:${number}` | `pinned-view:primary:${number}` | `pinned-view:thumbnail:${number}`;
export type VideoAttachmentOwner = 'active-video' | PinnedVideoAttachmentOwner;
export type VideoContextType = {
    activeCameraId: string;
    mirrorSelfView: boolean;
    toggleMirrorSelfView: () => void;
    selfCameraPermission: BrowserPermissionState;
    selfMicPermission: BrowserPermissionState;
    attachSharedVideo: ({ userId, videoPlayer }: {
        userId: number;
        videoPlayer: VideoPlayer;
    }) => Promise<void>;
    attachUserVideo: (userId: number, videoElement: VideoPlayer, owner?: VideoAttachmentOwner) => Promise<void>;
    cameraList: MediaDevice[];
    checkIfUserIdRegisteredInCanvas: (userId: number) => boolean;
    detachSharedVideo: (userId: number) => Promise<void>;
    detachUserVideo: (userId: number, owner?: VideoAttachmentOwner) => Promise<void>;
    finishScreenSharing: () => Promise<void>;
    localVideoRef: MutableRefObject<HTMLVideoElement | null>;
    localVideoStarted: boolean;
    selfVideoStarted: boolean;
    setVirtualBackgroundMode: (mode: VirtualBackgroundMode, imageId?: string) => Promise<void>;
    removeBackgroundImage: (imageId: string) => Promise<void>;
    recoverSelfShare: (element: HTMLVideoElement, options?: {
        allowRestart?: boolean;
    }) => Promise<void>;
    startScreenSharing: (params: {
        selfShareCanvas: HTMLVideoElement | null;
    }) => Promise<void>;
    startVideo: () => Promise<void>;
    stopLocalVideo: () => Promise<void>;
    stopVideo: () => Promise<void>;
    switchCamera: (deviceId: string) => Promise<void>;
    uploadBackgroundImage: (file: File) => Promise<void>;
    virtualBackground: VirtualBackgroundState;
    isVirtualBackgroundSupported: boolean;
};
export declare const VideoContext: import('react').Context<VideoContextType | null>;
export declare const useVideoContext: () => VideoContextType;
