import type { IStripcashModel } from '../../types'; /** * Превью стрима: провайдер отдаёт несколько качеств (`streams`), и в карточку * берём самое лёгкое — тумб много, каждая тянет свой поток. * * Порядок предпочтения задаётся конфигом (`WebcamsConfig.previewQuality`, * сейчас 240p → 480p): если лёгкого качества у модели нет, спускаемся к * следующему, а в самом конце — общий `stream_url` провайдера. */ export function resolveStreamPreview(model: IStripcashModel, preferred: string[]): string { const streams = normalizeStreams(model.streams); for (const quality of preferred) { const match = streams.find(stream => stream.key?.toLowerCase() === quality.toLowerCase()); if (match?.url) return match.url; } return streams.find(stream => !!stream.url)?.url || model.stream_url || ''; } /** Провайдер отдаёт `streams` то массивом, то объектом-словарём — приводим к одному виду. */ function normalizeStreams(streams: IStripcashModel['streams']): Array<{ key?: string, url?: string }> { if (Array.isArray(streams)) return streams; if (!streams || typeof streams !== 'object') return []; return Object.entries(streams).map(([key, value]) => (typeof value === 'string' ? { key, url: value } : { key, ...(value as object) } as { key?: string, url?: string })); }