import { Room, LocalParticipant, RemoteParticipant, Track } from 'livekit-client';
import { VoxketEventEmitter } from './event-emitter';
import { VoxketEvents } from '../types/core';
/**
 * MediaManager
 *
 * Manages all media-related functionality including:
 * - Camera control
 * - Microphone control
 * - Screen share control
 * - Device enumeration
 * - Track management
 * - Media permissions
 */
export declare class MediaManager {
    private room;
    private eventEmitter;
    private silencePreventionNode;
    private silencePreventionOscillator;
    private audioContext;
    private currentFacingMode;
    constructor(eventEmitter: VoxketEventEmitter<VoxketEvents>);
    /**
     * Initialize AudioContext and ensure it's running
     * This must be called on user interaction to comply with browser autoplay policies
     */
    private initializeAudioContext;
    /**
     * Ensure AudioContext is running (call before any audio operations)
     */
    ensureAudioContextRunning(): Promise<void>;
    /**
     * Set the room instance for media management
     */
    setRoom(room: Room | null): void;
    /**
     * Get local participant
     */
    getLocalParticipant(): LocalParticipant | null;
    /**
     * Get remote participants
     */
    getRemoteParticipants(): RemoteParticipant[];
    /**
     * Toggle microphone (if enabled is not specified, it will toggle)
     */
    toggleMicrophone(enabled?: boolean): Promise<void>;
    /**
     * Set microphone enabled state
     */
    setMicrophoneEnabled(enabled: boolean): Promise<void>;
    /**
     * Start silence prevention by injecting a very low-volume tone
     * This prevents LiveKit's silence detection from restarting the microphone track
     */
    private startSilencePrevention;
    /**
     * Stop silence prevention
     */
    private stopSilencePrevention;
    /**
     * Toggle camera (if enabled is not specified, it will toggle)
     */
    toggleCamera(enabled?: boolean): Promise<void>;
    /**
     * Set camera enabled state
     */
    setCameraEnabled(enabled: boolean): Promise<void>;
    /**
     * Enable camera
     */
    enableCamera(): Promise<void>;
    /**
     * Disable camera
     */
    disableCamera(): Promise<void>;
    /**
     * Switch between front and rear camera (mobile only).
     * Enumerates available cameras and explicitly switches to the other camera's
     * device ID (more reliable than relying on facingMode constraint alone).
     */
    switchCamera(): Promise<void>;
    /**
     * Get the current camera facing mode
     */
    getCurrentFacingMode(): 'user' | 'environment';
    /**
     * Start screen share
     */
    startScreenShare(): Promise<void>;
    /**
     * Stop screen share
     */
    stopScreenShare(): Promise<void>;
    /**
     * Get available audio input devices
     */
    getAudioInputDevices(): Promise<MediaDeviceInfo[]>;
    /**
     * Get available video input devices
     */
    getVideoInputDevices(): Promise<MediaDeviceInfo[]>;
    /**
     * Set audio input device
     */
    setAudioInputDevice(deviceId: string): Promise<void>;
    /**
     * Set video input device
     */
    setVideoInputDevice(deviceId: string): Promise<void>;
    /**
     * Get microphone track
     */
    getMicrophoneTrack(): import('livekit-client').LocalTrack<Track.Kind> | null | undefined;
    /**
     * Get camera track
     */
    getCameraTrack(): import('livekit-client').LocalTrack<Track.Kind> | null | undefined;
    /**
     * Get screen share track
     */
    getScreenShareTrack(): import('livekit-client').LocalTrack<Track.Kind> | null | undefined;
    /**
     * Check if microphone is enabled
     */
    get isMicrophoneEnabled(): boolean;
    /**
     * Check if camera is enabled
     */
    get isCameraEnabled(): boolean;
    /**
     * Check if screen share is enabled
     */
    get isScreenShareEnabled(): boolean;
    /**
     * Get agent audio track
     */
    getAgentAudioTrack(): {
        source: Track.Source;
        participant: RemoteParticipant;
        publication: import('livekit-client').RemoteTrackPublication;
    } | null;
    /**
     * Get agent video track
     */
    getAgentVideoTrack(): {
        source: Track.Source;
        participant: RemoteParticipant;
        publication: import('livekit-client').RemoteTrackPublication;
    } | null;
    /**
     * Get all video track refs (local and remote, camera and screen share)
     */
    getVideoTrackRefs(): Array<{
        source: Track.Source;
        participant: any;
        publication: any;
    }>;
    /**
     * Get camera track refs only
     */
    getCameraTrackRefs(): Array<{
        source: Track.Source;
        participant: any;
        publication: any;
    }>;
    /**
     * Get screen share track refs only
     */
    getScreenShareTrackRefs(): Array<{
        source: Track.Source;
        participant: any;
        publication: any;
    }>;
    /**
     * Get publish permissions for various media sources
     */
    getPublishPermissions(): {
        camera: boolean;
        microphone: boolean;
        screenShare: boolean;
        data: boolean;
    };
    /**
     * Check if a specific source can be published
     */
    canPublishSource(source: 'camera' | 'microphone' | 'screenShare'): boolean;
}
