import { AudioStream, VideoStream } from '../types';
import { CodecParseResult } from './CodecUtils';
/**
 * Format sorting preferences configuration
 */
export interface FormatSorterConfig {
    preferHighQuality?: boolean;
    preferHighFramerate?: boolean;
    preferHDR?: boolean;
    preferModernCodecs?: boolean;
    preferredVideoCodecs?: string[];
    preferredAudioCodecs?: string[];
    preferredContainers?: string[];
    preferUnencrypted?: boolean;
    preferDash?: boolean;
    preferProgressive?: boolean;
    preferredLanguages?: string[];
    targetPlatform?: 'web' | 'mobile' | 'desktop' | 'smart_tv';
    customSortFields?: string[];
}
/**
 * Extended stream info for sorting
 */
interface ExtendedStreamInfo {
    stream: AudioStream | VideoStream;
    codecInfo: CodecParseResult;
    qualityScore: number;
    codecScore: number;
    containerScore: number;
    hdrScore: number;
    encryptionPenalty: number;
    platformCompatibility: number;
    languageScore: number;
    totalScore: number;
}
/**
 * Advanced Format Sorter class based on yt-dlp methodology
 */
export declare class FormatSorter {
    private config;
    private static readonly CODEC_RANKINGS;
    private static readonly CONTAINER_RANKINGS;
    constructor(config?: FormatSorterConfig);
    /**
     * Sort audio streams by quality and preferences
     */
    sortAudioStreams(streams: AudioStream[]): AudioStream[];
    /**
     * Sort video streams by quality and preferences
     */
    sortVideoStreams(streams: VideoStream[]): VideoStream[];
    /**
     * Get the best audio stream based on quality analysis
     */
    getBestAudioStream(streams: AudioStream[]): AudioStream | null;
    /**
     * Get the best video stream based on quality analysis
     */
    getBestVideoStream(streams: VideoStream[]): VideoStream | null;
    /**
     * Analyze audio stream and calculate comprehensive scores
     */
    private analyzeAudioStream;
    /**
     * Analyze video stream and calculate comprehensive scores
     */
    private analyzeVideoStream;
    /**
     * Extract codec information from stream
     */
    private getCodecInfo;
    /**
     * Calculate audio quality score based on bitrate, sample rate, etc.
     */
    private calculateAudioQualityScore;
    /**
     * Calculate video quality score based on resolution, bitrate, fps, etc.
     */
    private calculateVideoQualityScore;
    /**
     * Calculate codec quality score
     */
    private calculateCodecScore;
    /**
     * Calculate container format score
     */
    private calculateContainerScore;
    /**
     * Calculate HDR bonus score
     */
    private calculateHDRScore;
    /**
     * Calculate encryption penalty
     */
    private calculateEncryptionPenalty;
    /**
     * Calculate platform compatibility score
     */
    private calculatePlatformCompatibility;
    /**
     * Calculate language preference score
     */
    private calculateLanguageScore;
    /**
     * Check web browser compatibility
     */
    private isWebCompatible;
    /**
     * Check mobile device compatibility
     */
    private isMobileCompatible;
    /**
     * Check smart TV compatibility
     */
    private isSmartTVCompatible;
    /**
     * Get detailed format analysis for debugging
     */
    getFormatAnalysis(stream: AudioStream | VideoStream): ExtendedStreamInfo;
    /**
     * Update sorting configuration
     */
    updateConfig(newConfig: Partial<FormatSorterConfig>): void;
    /**
     * Get current configuration
     */
    getConfig(): FormatSorterConfig;
}
/**
 * Create a format sorter with predefined configurations for common use cases
 */
export declare class FormatSorterPresets {
    /**
     * High quality preset - prefer best codecs and highest quality
     */
    static createHighQualityPreset(): FormatSorter;
    /**
     * Web compatibility preset - prefer formats that work well in browsers
     */
    static createWebCompatibilityPreset(): FormatSorter;
    /**
     * Mobile preset - prefer formats that work well on mobile devices
     */
    static createMobilePreset(): FormatSorter;
    /**
     * Bandwidth optimized preset - prefer smaller file sizes
     */
    static createBandwidthOptimizedPreset(): FormatSorter;
}
export {};
//# sourceMappingURL=FormatSorter.d.ts.map