'use client'
import { useState, useEffect } from 'react'
import { useRouter } from 'next/navigation'
import { useTheme } from '@/lib/ThemeContext'
import { useLanguage } from '@/lib/LanguageContext'
import { useAlerts, Alert, getImportanceColor, getRelativeTime } from '@/lib/AlertsContext'
import { Sidebar } from '@/components/Sidebar'
import { AlertsWizard } from '@/components/AlertsWizard'
import { InfoBox, TipBox } from '@/components/InfoBox'
import { Footer } from '@/components/Footer'
import { LanguageDropdown } from '@/components/LanguageDropdown'
import { ThemeToggle } from '@/components/ThemeToggle'
// Alert Detail Modal
function AlertDetailModal({
alert,
onClose,
onMarkRead
}: {
alert: Alert
onClose: () => void
onMarkRead: () => void
}) {
const { isDark } = useTheme()
useEffect(() => {
if (!alert.isRead) {
onMarkRead()
}
}, [alert, onMarkRead])
return (
{/* Header */}
{alert.importance}
{getRelativeTime(alert.timestamp)}
{/* Title */}
{alert.title}
{/* LLM Summary */}
🤖 KI-Zusammenfassung
{alert.summary}
{/* Sources */}
{/* Original Source */}
)
}
// Alert Headline Component
function AlertHeadline({
alert,
onClick
}: {
alert: Alert
onClick: () => void
}) {
const { isDark } = useTheme()
return (
)
}
export default function AlertsPage() {
const router = useRouter()
const { isDark } = useTheme()
const { t } = useLanguage()
const {
alerts,
unreadCount,
isLoading,
topics,
settings,
markAsRead,
markAllAsRead,
updateSettings
} = useAlerts()
const [selectedAlert, setSelectedAlert] = useState(null)
const [showWizard, setShowWizard] = useState(false)
const [filterImportance, setFilterImportance] = useState('all')
const [viewMode, setViewMode] = useState<'simple' | 'expert'>('simple')
// Zeige Wizard wenn noch nicht abgeschlossen
useEffect(() => {
if (!settings.wizardCompleted && topics.length === 0) {
setShowWizard(true)
}
}, [settings.wizardCompleted, topics.length])
// Gefilterte Alerts
const filteredAlerts = alerts.filter(alert => {
if (filterImportance === 'all') return true
if (filterImportance === 'unread') return !alert.isRead
return alert.importance === filterImportance
})
// Wizard-Modus
if (showWizard) {
return (
setShowWizard(false)}
onSkip={() => {
updateSettings({ wizardCompleted: true })
setShowWizard(false)
}}
/>
)
}
return (
{/* Animated Background Blobs */}
{/* Sidebar */}
{/* Main Content */}
{/* Header */}
🔔 Alerts
{unreadCount > 0 && (
{unreadCount} neu
)}
Aktuelle Nachrichten zu Ihren Bildungsthemen
{/* Mode Toggle */}
{/* Alerts Liste */}
{/* Filter Bar */}
{['all', 'unread', 'KRITISCH', 'DRINGEND', 'WICHTIG'].map((filter) => (
))}
{unreadCount > 0 && (
)}
{/* Alerts */}
{isLoading ? (
) : filteredAlerts.length === 0 ? (
ðŸ“
Keine Alerts gefunden
) : (
{filteredAlerts.map(alert => (
setSelectedAlert(alert)}
/>
))}
)}
{/* Right Sidebar */}
{/* Topics */}
📋 Meine Themen
{topics.length === 0 ? (
Noch keine Themen konfiguriert.
) : (
{topics.map(topic => (
{topic.icon}
{topic.name}
{topic.keywords.slice(0, 3).join(', ')}
))}
)}
{/* Stats */}
📊 Statistik
Gesamt
{alerts.length}
Ungelesen
{unreadCount}
Themen
{topics.length}
{/* Info */}
Alle Alerts werden automatisch mit KI zusammengefasst,
um Ihnen Zeit zu sparen.
{/* Alert Detail Modal */}
{selectedAlert && (
setSelectedAlert(null)}
onMarkRead={() => markAsRead(selectedAlert.id)}
/>
)}
{/* Blob Animation Styles */}
)
}