export interface ISignalingMessage { type: 'offer' | 'answer' | 'ice-candidate' | 'join' | 'leave' | 'publisher-joined' | 'publisher-left'; data?: any; senderId?: string; targetId?: string; } export interface IWebRTCClient { connect(): Promise; disconnect(): void; sendMessage(message: ISignalingMessage): void; isConnected(): boolean; } export interface IMediaHandler { getLocalStream(): Promise; stopLocalStream(): void; getLocalVideo(): HTMLVideoElement | null; } export interface IUIController { updateStatus(status: string, className: string): void; updateSubscribersCount(count: number): void; setButtonStates(startEnabled: boolean, stopEnabled: boolean): void; }