import React from "react";
export interface MediaFile {
    id: string;
    type: "audio" | "video";
    src: string;
    title?: string;
    description?: string;
    duration?: number;
    thumbnail?: string;
    poster?: string;
    size?: number;
    format?: string;
    quality?: "auto" | "144p" | "240p" | "360p" | "480p" | "720p" | "1080p" | "1440p" | "2160p";
    chapters?: MediaChapter[];
    subtitles?: MediaSubtitle[];
    metadata?: Record<string, any>;
}
export interface MediaChapter {
    id: string;
    title: string;
    startTime: number;
    endTime: number;
    thumbnail?: string;
    description?: string;
}
export interface MediaSubtitle {
    id: string;
    language: string;
    label: string;
    src?: string;
    content?: SubtitleEntry[];
    isDefault?: boolean;
}
export interface SubtitleEntry {
    id: string;
    startTime: number;
    endTime: number;
    text: string;
    speaker?: string;
    confidence?: number;
}
export interface TranscriptEntry {
    id: string;
    startTime: number;
    endTime: number;
    text: string;
    speaker?: string;
    confidence?: number;
    keywords?: string[];
    sentiment?: "positive" | "neutral" | "negative";
    summary?: string;
}
export interface MediaAnalytics {
    totalViews: number;
    averageWatchTime: number;
    completionRate: number;
    engagementPoints: Array<{
        time: number;
        engagement: number;
    }>;
    heatmapData: Array<{
        time: number;
        views: number;
    }>;
    deviceStats: Record<string, number>;
    locationStats: Record<string, number>;
}
export interface PlaybackState {
    mediaId: string;
    currentTime: number;
    duration: number;
    isPlaying: boolean;
    isLoading: boolean;
    isError: boolean;
    volume: number;
    playbackRate: number;
    quality: string;
    isFullscreen: boolean;
    isMuted: boolean;
    buffered: TimeRanges | null;
    activeChapter?: string;
    activeSubtitle?: string;
}
interface MediaContextValue {
    mediaFiles: MediaFile[];
    addMediaFile: (file: MediaFile) => void;
    removeMediaFile: (id: string) => void;
    getMediaFile: (id: string) => MediaFile | undefined;
    updateMediaFile: (id: string, updates: Partial<MediaFile>) => void;
    playbackState: PlaybackState | null;
    setPlaybackState: (state: PlaybackState | null) => void;
    play: (mediaId: string) => void;
    pause: () => void;
    stop: () => void;
    seekTo: (time: number) => void;
    setVolume: (volume: number) => void;
    setPlaybackRate: (rate: number) => void;
    toggleMute: () => void;
    toggleFullscreen: () => void;
    setQuality: (quality: string) => void;
    transcripts: Record<string, TranscriptEntry[]>;
    generateTranscript: (mediaId: string) => Promise<void>;
    searchTranscript: (mediaId: string, query: string) => TranscriptEntry[];
    getTranscriptAtTime: (mediaId: string, time: number) => TranscriptEntry | undefined;
    setActiveChapter: (mediaId: string, chapterId: string) => void;
    getChapterAtTime: (mediaId: string, time: number) => MediaChapter | undefined;
    setActiveSubtitle: (mediaId: string, subtitleId: string) => void;
    generateSubtitles: (mediaId: string, language: string) => Promise<void>;
    analytics: Record<string, MediaAnalytics>;
    trackView: (mediaId: string, watchTime: number) => void;
    trackEngagement: (mediaId: string, time: number, type: "play" | "pause" | "seek" | "fullscreen") => void;
    generateSummary: (mediaId: string) => Promise<string>;
    identifySpeakers: (mediaId: string) => Promise<string[]>;
    extractKeywords: (mediaId: string) => Promise<string[]>;
    analyzeSentiment: (mediaId: string) => Promise<Record<number, "positive" | "neutral" | "negative">>;
    isRecording: boolean;
    recordingDevices: MediaDeviceInfo[];
    startRecording: (type: "audio" | "video", options?: RecordingOptions) => Promise<void>;
    stopRecording: () => Promise<MediaFile | null>;
    pauseRecording: () => void;
    resumeRecording: () => void;
}
export interface RecordingOptions {
    audio?: {
        deviceId?: string;
        echoCancellation?: boolean;
        noiseSuppression?: boolean;
        sampleRate?: number;
    };
    video?: {
        deviceId?: string;
        width?: number;
        height?: number;
        frameRate?: number;
        facingMode?: "user" | "environment";
    };
    quality?: "low" | "medium" | "high";
    format?: "webm" | "mp4" | "ogg";
}
export declare const MediaProvider: React.FC<{
    children: React.ReactNode;
    className?: string;
    "data-testid"?: string;
}>;
export { MediaProvider as GlassMediaProvider };
export declare const useMedia: () => MediaContextValue;
//# sourceMappingURL=GlassMediaProvider.d.ts.map