import { S } from './state.js';
import { esc, toast } from './utils.js';
import { makeGlobalTrackItem } from './components.js';
export async function resolveYouTubeLink() {
const url = document.getElementById('importer-link-input')?.value.trim();
if (!url) return;
if (!S.cfg.backendUrl) { toast('⚠ Backend URL in Einstellungen konfigurieren'); return; }
const preview = document.getElementById('yt-preview');
const inner = document.getElementById('yt-preview-inner');
const section = document.getElementById('yt-tracks-section');
preview.style.display = '';
section.style.display = 'none';
inner.innerHTML = '
';
try {
const res = await fetch(`${S.cfg.backendUrl}/api/youtube/resolve`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url }),
signal: AbortSignal.timeout(50000),
});
if (!res.ok) {
const err = await res.json().catch(() => ({}));
throw new Error(err.error || `HTTP ${res.status}`);
}
const data = await res.json();
window._ytResolved = data;
_renderYouTubePreview(data);
} catch (e) {
if (e.name === 'TimeoutError' || e.name === 'AbortError') {
inner.innerHTML = `Zeitüberschreitung — yt-dlp hat nicht rechtzeitig geantwortet.
`;
return;
}
inner.innerHTML = `${esc(e.message)}
`;
}
}
function _renderYouTubePreview(data) {
const inner = document.getElementById('yt-preview-inner');
const section = document.getElementById('yt-tracks-section');
const list = document.getElementById('yt-tracks-list');
const titleEl = document.getElementById('yt-tracks-title');
const typeLabel = data.type === 'playlist' ? 'YouTube Playlist' : 'YouTube';
const YT_RED = '#FF0000';
const art = (data.artworkUrl || '').replace(/\/hqdefault\.jpg/, '/maxresdefault.jpg');
const count = data.tracks?.length || 0;
let actionsHtml = '';
if (data.type === 'track' && count > 0) {
actionsHtml = `
`;
} else if (data.type === 'playlist') {
actionsHtml = `
`;
}
const artHtml = art
? `
`
: '';
inner.innerHTML = `
${typeLabel}
${esc(data.name)}
${esc(data.artist)}${count > 1 ? ` · ${count} Tracks` : ''}
${actionsHtml}
`;
if (count > 0) {
titleEl.textContent = `${count} Tracks`;
list.innerHTML = '';
(data.tracks || []).forEach((t, i) => list.appendChild(makeGlobalTrackItem(t, i, data.tracks)));
section.style.display = '';
}
}
export function executeYouTubeDownload(opts) {
if (!S.cfg.backendUrl) { toast('⚠ Kein Backend konfiguriert'); return; }
window.executeSpotifyDownload(opts);
}