import type { MediaAsset } from "./api"; const tokens = (value: string) => value .toLocaleLowerCase("ru") .replaceAll("ё", "е") .replace(/^(оз\.|р\.)\s*/, "") .replace(/[^a-zа-я0-9]+/giu, " ") .trim() .split(/\s+/) .filter(Boolean); export const findMediaByLabel = (assets: MediaAsset[], label: string): MediaAsset | undefined => { const wanted = tokens(label); const exact = assets.filter((asset) => tokens(asset.label ?? "").join(" ") === wanted.join(" ")); if (exact.length === 1) return exact[0]; const wantedSet = new Set(wanted); const candidates = assets.filter((asset) => { const available = new Set(tokens(asset.label ?? "")); return wanted.every((token) => available.has(token)) || [...available].every((token) => wantedSet.has(token)); }); return candidates.length === 1 ? candidates[0] : undefined; };