export interface FallbackSource {
    url: string;
    type?: 'mp4' | 'hls' | 'dash' | 'webm' | 'auto';
    priority?: number;
}
export interface VideoSource {
    url: string;
    type?: 'mp4' | 'hls' | 'dash' | 'webm' | 'auto';
    drm?: DRMConfig;
    subtitles?: SubtitleTrack[];
    metadata?: VideoMetadata;
    fallbackSources?: FallbackSource[];
    fallbackPoster?: string;
    fallbackShowErrorMessage?: boolean;
    fallbackRetryDelay?: number;
    fallbackRetryAttempts?: number;
    onAllSourcesFailed?: (errors: Array<{
        url: string;
        error: any;
    }>) => void;
}
export interface DRMConfig {
    licenseUrl: string;
    certificateUrl?: string;
    headers?: Record<string, string>;
    type: 'widevine' | 'playready' | 'fairplay' | 'clearkey';
}
export interface SubtitleTrack {
    url: string;
    language: string;
    label: string;
    kind: 'subtitles' | 'captions' | 'descriptions';
    default?: boolean;
}
export interface VideoMetadata {
    id?: string;
    videoId?: string;
    title?: string;
    description?: string;
    duration?: number;
    thumbnailUrl?: string;
    posterUrl?: string;
}
export interface Quality {
    height: number;
    width: number;
    bitrate: number;
    label: string;
    index: number;
}
export interface PlayerState {
    isPlaying: boolean;
    isPaused: boolean;
    isBuffering: boolean;
    isEnded: boolean;
    isError: boolean;
    currentTime: number;
    duration: number;
    bufferedPercentage: number;
    volume: number;
    isMuted: boolean;
    playbackRate: number;
    currentQuality?: Quality;
    availableQualities: Quality[];
}
export interface PlayerEvents {
    onReady?: () => void;
    onPlay?: () => void;
    onPause?: () => void;
    onEnded?: () => void;
    onTimeUpdate?: (time: number) => void;
    onBuffering?: (isBuffering: boolean) => void;
    onError?: (error: PlayerError) => void;
    onQualityChanged?: (quality: Quality) => void;
    onVolumeChanged?: (volume: number) => void;
    onFullscreenChanged?: (isFullscreen: boolean) => void;
    onProgress?: (buffered: number) => void;
    onSeeking?: () => void;
    onSeeked?: () => void;
    onLoadedMetadata?: (metadata: VideoMetadata) => void;
    onFreePreviewEnded?: () => void;
    epgToggle?: (data?: any) => void;
    epgDataSet?: (data?: any) => void;
    frameworkBrandingClick?: (data: {
        timestamp: number;
        url: string;
        userAgent: string;
    }) => void;
    chapterchange?: (chapter: any) => void;
    segmententered?: (segment: any) => void;
    segmentexited?: (segment: any) => void;
    segmentskipped?: (segment: any) => void;
    chapterSegmentEntered?: (data: any) => void;
    chapterSegmentSkipped?: (data: any) => void;
    chapterSkipButtonShown?: (data: any) => void;
    chapterSkipButtonHidden?: (data: any) => void;
    chaptersLoaded?: (data: any) => void;
    chaptersLoadError?: (data: any) => void;
    navigationBackClicked?: () => void;
    navigationCloseClicked?: () => void;
    onLiveStreamWaiting?: () => void;
    onLiveStreamReady?: () => void;
    onBandwidthDetected?: (data: {
        bandwidth: number | null;
        tier: string;
        method: string;
    }) => void;
    onBandwidthTierChanged?: (data: {
        tier: string;
        bandwidth: number | null;
    }) => void;
}
export interface PlayerError {
    code: string;
    message: string;
    type: 'network' | 'media' | 'drm' | 'unknown';
    fatal: boolean;
    details?: any;
}
export interface PaywallConfig {
    enabled: boolean;
    apiBase: string;
    userId: string;
    videoId: string;
    gateways: Array<'stripe' | 'cashfree'>;
    branding?: {
        title?: string;
        description?: string;
        logoUrl?: string;
        theme?: any;
    };
    popup?: {
        width?: number;
        height?: number;
    };
    emailAuth?: {
        enabled: boolean;
        skipIfAuthenticated?: boolean;
        sessionStorage?: {
            tokenKey?: string;
            refreshTokenKey?: string;
            userIdKey?: string;
        };
        api?: {
            requestOtp: string;
            verifyOtp: string;
            refreshToken?: string;
            logout?: string;
        };
        ui?: {
            title?: string;
            description?: string;
            emailPlaceholder?: string;
            otpPlaceholder?: string;
            submitButtonText?: string;
            resendButtonText?: string;
            resendCooldown?: number;
        };
        validation?: {
            otpLength?: number;
            otpTimeout?: number;
            rateLimiting?: {
                maxAttempts?: number;
                windowMinutes?: number;
            };
        };
    };
}
export interface ShareConfig {
    enabled?: boolean;
    url?: string;
    title?: string;
    text?: string;
    generateUrl?: (videoData: {
        videoId?: string;
        metadata?: any;
    }) => string;
}
export interface ControlsVisibilityConfig {
    playback?: {
        centerPlayButton?: boolean;
        playPauseButton?: boolean;
        skipButtons?: boolean;
        previousButton?: boolean;
        nextButton?: boolean;
    };
    audio?: {
        volumeButton?: boolean;
        volumeSlider?: boolean;
    };
    progress?: {
        progressBar?: boolean;
        timeDisplay?: boolean;
    };
    quality?: {
        badge?: boolean;
        settingsButton?: boolean;
    };
    display?: {
        fullscreenButton?: boolean;
        pipButton?: boolean;
    };
    features?: {
        epgButton?: boolean;
        playlistButton?: boolean;
        castButton?: boolean;
        shareButton?: boolean;
    };
    chrome?: {
        navigationButtons?: boolean;
        frameworkBranding?: boolean;
    };
}
export interface PlayerConfig {
    autoPlay?: boolean;
    muted?: boolean;
    volume?: number;
    controls?: boolean;
    loop?: boolean;
    preload?: 'none' | 'metadata' | 'auto';
    crossOrigin?: 'anonymous' | 'use-credentials';
    playsInline?: boolean;
    defaultQuality?: number;
    enableAdaptiveBitrate?: boolean;
    debug?: boolean;
    startTime?: number;
    freeDuration?: number;
    isLive?: boolean;
    liveWaitingMessages?: {
        waitingForStream?: string;
        loading?: string;
        comingBack?: string;
    };
    liveMessageRotationInterval?: number;
    liveRetryInterval?: number;
    liveMaxRetryAttempts?: number;
    liveCountdown?: {
        nextProgramStartTime?: number;
        noProgramMessage?: string;
        countdownMessage?: string;
        timerColor?: string;
        onCountdownComplete?: () => void;
        autoReloadOnComplete?: boolean;
        updateInterval?: number;
    };
    paywall?: PaywallConfig;
    share?: ShareConfig;
    adaptiveBitrate?: {
        startBitrate?: number;
    };
    playlist?: {
        showPrevNext?: boolean;
        onPreviousTrack?: () => void;
        onNextTrack?: () => void;
        replaceSkipWithPrevNext?: boolean;
        onPlaylistToggle?: () => void;
    };
    controlsVisibility?: ControlsVisibilityConfig;
    settings?: {
        enabled?: boolean;
        speed?: boolean;
        quality?: boolean;
        subtitles?: boolean;
    };
    navigation?: {
        onBack?: () => void;
        onClose?: () => void;
    };
    showFrameworkBranding?: boolean;
    fullscreenElement?: HTMLElement;
}
export interface IVideoPlayer {
    initialize(container: HTMLElement | string, config?: PlayerConfig): Promise<void>;
    destroy(): Promise<void>;
    load(source: VideoSource): Promise<void>;
    play(): Promise<void>;
    pause(): void;
    stop(): void;
    seek(time: number): void;
    setVolume(level: number): void;
    mute(): void;
    unmute(): void;
    toggleMute(): void;
    getQualities(): Quality[];
    getCurrentQuality(): Quality | null;
    setQuality(index: number): void;
    setAutoQuality(enabled: boolean): void;
    setPlaybackRate(rate: number): void;
    getPlaybackRate(): number;
    getCurrentTime(): number;
    getDuration(): number;
    getBufferedPercentage(): number;
    getState(): PlayerState;
    isPlaying(): boolean;
    isPaused(): boolean;
    isEnded(): boolean;
    enterFullscreen(): Promise<void>;
    exitFullscreen(): Promise<void>;
    toggleFullscreen(): Promise<void>;
    enterPictureInPicture(): Promise<void>;
    exitPictureInPicture(): Promise<void>;
    on(event: string, handler: Function): void;
    off(event: string, handler?: Function): void;
    once(event: string, handler: Function): void;
    getSubtitles(): SubtitleTrack[];
    setSubtitleTrack(index: number): void;
    disableSubtitles(): void;
    setAudioTrack?(index: number): void;
    getAudioTracks?(): any[];
    getThumbnail?(time: number): string;
    getStats?(): any;
    setFreeDuration?(seconds: number): void;
    resetFreePreviewGate?(): void;
    getBandwidthInfo?(): {
        estimated: number | null;
        tier: string | null;
        method: string | null;
    };
    redetectBandwidth?(): Promise<void>;
}
//# sourceMappingURL=IVideoPlayer.d.ts.map