import { Track } from '../entities';
import { Bitrate } from '../value-objects';
/**
 * Domain service for track selection and prioritization.
 * Implements quality-first download strategy with progressive fallback.
 */
export declare class TrackSelectionService {
    /**
     * Groups tracks by bitrate for quality-tiered download attempts.
     * @param tracks - Array of available tracks
     * @returns Map of bitrate to tracks
     */
    groupByBitrate(tracks: Track[]): Map<number, Track[]>;
    /**
     * Sorts tracks by quality within a bitrate group.
     * Prioritizes slot availability, then quality score.
     * @param tracks - Tracks to sort
     * @returns Sorted tracks (best first)
     */
    sortByQuality(tracks: Track[]): Track[];
    /**
     * @param groups - Bitrate groups map
     * @returns Bitrates sorted from highest to lowest
     */
    getOrderedBitrates(groups: Map<number, Track[]>): number[];
    /**
     * Selects best tracks using quality-first strategy.
     * @param tracks - All available tracks
     * @param maxPerBitrate - Max tracks to select per bitrate tier
     * @returns Ordered list of best tracks to attempt
     */
    selectBestTracks(tracks: Track[], maxPerBitrate?: number): Track[];
    /**
     * Filters out tracks below minimum bitrate threshold.
     * @param tracks - Tracks to filter
     * @param minBitrate - Minimum acceptable bitrate
     * @returns Tracks meeting minimum quality
     */
    filterByMinimumQuality(tracks: Track[], minBitrate: Bitrate): Track[];
    /**
     * Filters out tracks above maximum bitrate threshold.
     * @param tracks - Tracks to filter
     * @param maxBitrate - Maximum acceptable bitrate
     * @returns Tracks not exceeding maximum quality
     */
    filterByMaximumQuality(tracks: Track[], maxBitrate: Bitrate): Track[];
    /**
     * Filters tracks by bitrate range.
     * @param tracks - Tracks to filter
     * @param minBitrate - Minimum acceptable bitrate
     * @param maxBitrate - Maximum acceptable bitrate (optional)
     * @returns Tracks within quality range
     */
    filterByQualityRange(tracks: Track[], minBitrate: Bitrate, maxBitrate?: Bitrate): Track[];
    /**
     * Validates if track meets quality standards.
     * @param track - Track to validate
     * @param minBitrate - Minimum bitrate requirement
     * @param maxBitrate - Maximum bitrate requirement (optional)
     * @returns True if track meets all quality criteria
     */
    meetsQualityStandards(track: Track, minBitrate: Bitrate, maxBitrate?: Bitrate): boolean;
}
//# sourceMappingURL=track-selection-service.d.ts.map