/**
 * Video Component Types
 * Core types for video functionality in the Voxket SDK
 */
export interface VideoTrack {
    id: string;
    participantId: string;
    isLocal: boolean;
    isEnabled: boolean;
    isScreenShare: boolean;
    dimensions?: {
        width: number;
        height: number;
    };
    source?: 'camera' | 'screen' | 'app';
}
export interface VideoLayout {
    type: 'grid' | 'speaker' | 'sidebar' | 'picture-in-picture' | 'gallery';
    maxParticipants?: number;
    showLocalVideo?: boolean;
    aspectRatio?: '16:9' | '4:3' | '1:1' | 'auto';
}
export interface VideoTileProps {
    track: VideoTrack;
    participantName?: string;
    showControls?: boolean;
    showName?: boolean;
    showMuteIndicator?: boolean;
    isPinned?: boolean;
    className?: string;
    onClick?: (track: VideoTrack) => void;
    onPin?: (track: VideoTrack) => void;
    onUnpin?: (track: VideoTrack) => void;
}
export interface VideoGridProps {
    tracks: VideoTrack[];
    layout: VideoLayout;
    className?: string;
    onLayoutChange?: (layout: VideoLayout) => void;
    onTrackClick?: (track: VideoTrack) => void;
    maxVisibleTracks?: number;
    showPagination?: boolean;
}
export interface VideoControlsProps {
    localTrack?: VideoTrack;
    onToggleCamera?: () => void;
    onToggleScreenShare?: () => void;
    onLayoutChange?: (layout: VideoLayout) => void;
    showLayoutControls?: boolean;
    showCameraControls?: boolean;
    showScreenShareControls?: boolean;
    className?: string;
}
export interface PictureInPictureProps {
    primaryTrack: VideoTrack;
    secondaryTrack?: VideoTrack;
    position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
    size?: 'small' | 'medium' | 'large';
    showControls?: boolean;
    draggable?: boolean;
    onSwap?: () => void;
    className?: string;
}
export interface VideoState {
    tracks: VideoTrack[];
    layout: VideoLayout;
    pinnedTrack?: VideoTrack;
    isRecording: boolean;
    pictureInPicture?: {
        enabled: boolean;
        primaryTrack?: VideoTrack;
        secondaryTrack?: VideoTrack;
    };
}
export interface VideoHookReturn {
    tracks: VideoTrack[];
    localTrack?: VideoTrack;
    remoteTraracks: VideoTrack[];
    pinnedTrack?: VideoTrack;
    layout: VideoLayout;
    isRecording: boolean;
    toggleCamera: () => Promise<void>;
    toggleScreenShare: () => Promise<void>;
    setLayout: (layout: VideoLayout) => void;
    pinTrack: (track: VideoTrack) => void;
    unpinTrack: () => void;
    startRecording: () => Promise<void>;
    stopRecording: () => Promise<void>;
    getTrackById: (id: string) => VideoTrack | undefined;
    getTracksByParticipant: (participantId: string) => VideoTrack[];
    isTrackActive: (track: VideoTrack) => boolean;
}
