// UI management functions function showStatus(message, type = 'loading') { const statusBar = document.getElementById('statusBar'); statusBar.className = `status-bar visible ${type}`; if (type === 'loading') { statusBar.innerHTML = `${message}`; } else { statusBar.textContent = message; } if (type !== 'loading') { setTimeout(() => { statusBar.classList.remove('visible'); }, 3000); } } function updateProgress(current, total) { const progressInfo = document.getElementById('progressInfo'); const progressFill = progressInfo.querySelector('.progress-fill'); const progressText = progressInfo.querySelector('.progress-text'); const etaText = progressInfo.querySelector('.eta-text'); if (total === 0) { progressInfo.classList.remove('active'); return; } progressInfo.classList.add('active'); const percentage = (current / total) * 100; progressFill.style.width = percentage + '%'; progressText.textContent = `Inserate werden geladen: ${current}/${total}`; // Calculate ETA if (AppState.scrapeStartTime && current > 0) { const elapsed = (Date.now() - AppState.scrapeStartTime) / 1000; const avgTimePerListing = elapsed / current; const remaining = total - current; const etaSeconds = Math.round(avgTimePerListing * remaining); const minutes = Math.floor(etaSeconds / 60); const seconds = etaSeconds % 60; if (minutes > 0) { etaText.textContent = `Noch ca. ${minutes}m ${seconds}s`; } else { etaText.textContent = `Noch ca. ${seconds}s`; } } } function highlightSelectedListing() { document.querySelectorAll('.result-item').forEach(item => { const itemId = parseInt(item.dataset.id); if (itemId === AppState.selectedListingId) { item.classList.add('selected'); item.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } else { item.classList.remove('selected'); } }); } function formatDate(dateString) { if (!dateString) return 'Unbekanntes Datum'; const date = new Date(dateString); return date.toLocaleDateString('de-DE'); } function renderResults(listings) { const resultsList = document.getElementById('resultsList'); const resultsCount = document.querySelector('.results-count'); if (listings.length === 0) { resultsList.innerHTML = '