import type { IScreamConfig, ConnectOptions, ParticipantInfo, VideoQualityPreset, AudioQualityPreset, RoomStatus, TokenResponse, AuthResponse, DataMessage, MediaState, ConnectionInfo, DebugInfo } from './types';
export type { IScreamConfig, ConnectOptions, ParticipantInfo, VideoQualityPreset, AudioQualityPreset, RoomStatus, TokenResponse, AuthResponse, DataMessage, MediaState, ConnectionInfo, DebugInfo };
export declare class IScreamWebRTC {
    private config;
    private room;
    private isConnected;
    private isConnecting;
    private eventListeners;
    private authToken;
    private tokenExpiry;
    private iceServers;
    private participants;
    private localParticipant;
    private currentPresenter;
    private userRole;
    private roomName;
    private canPublishMedia;
    private isScreenSharing;
    private currentVideoQuality;
    private currentAudioQuality;
    private adaptiveStreamEnabled;
    private selectedAudioInputId;
    private selectedAudioOutputId;
    private reconnectAttempts;
    private maxReconnectAttempts;
    private reconnectDelay;
    private presenterManager;
    private mediaController;
    constructor(config: IScreamConfig);
    on(event: string, handler: Function): void;
    off(event: string, handler: Function): void;
    private emit;
    private authenticate;
    private getToken;
    private getRoomInfoFromServer;
    private preValidateRoom;
    private cleanupGhostParticipantsBeforeJoin;
    connect(roomConfig: ConnectOptions): Promise<void>;
    private setupLocalParticipant;
    private setup2NStructure;
    private syncExistingParticipants;
    private setupRoomEvents;
    private handleParticipantJoined;
    private handleParticipantLeft;
    private handleTrackSubscribed;
    private handleTrackUnsubscribed;
    private handleLocalTrackPublished;
    private handleDataReceived;
    private handleParticipantMetadataChanged;
    private disableMediaForStudent;
    canPublishMediaStream(): boolean;
    enableVideo(enabled: boolean): Promise<boolean>;
    enableAudio(enabled: boolean): Promise<boolean>;
    toggleCamera(): Promise<boolean>;
    toggleMicrophone(): Promise<boolean>;
    startScreenShare(): Promise<boolean>;
    stopScreenShare(): Promise<void>;
    isScreenShareActive(): boolean;
    setVideoQuality(quality: string): Promise<void>;
    setAudioQuality(quality: string): Promise<void>;
    switchAudioInput(deviceId: string): Promise<void>;
    switchAudioOutput(deviceId: string): Promise<void>;
    getMediaDevices(): Promise<MediaDeviceInfo[]>;
    getMediaState(): MediaState;
    setMediaState(state: {
        camera?: boolean;
        microphone?: boolean;
        screenShare?: boolean;
    }): Promise<any>;
    disconnect(): Promise<void>;
    private getParticipantRole;
    private setupBeforeUnloadHandler;
    cleanupGhostParticipants(): Promise<{
        success: boolean;
        removed: string[];
    }>;
    getParticipants(): ParticipantInfo[];
    setPresenter(participantIdentity: string): Promise<void>;
    clearPresenter(): Promise<string | null>;
    getCurrentPresenter(): string | null;
    sendMessage(message: string): Promise<void>;
    getParticipantsByRole(role: 'teacher' | 'student'): ParticipantInfo[];
    getRemoteParticipants(): ParticipantInfo[];
    getConnectionInfo(): ConnectionInfo;
    getDebugInfo(): DebugInfo;
    getRoomName(): string | null;
    getUserRole(): 'teacher' | 'student' | null;
    getLocalParticipant(): ParticipantInfo | null;
    isConnectionActive(): boolean;
    private attachLocalVideoTrack;
    private attachRemoteVideoTrack;
}
export default IScreamWebRTC;
