import React from 'react'; import { Link, useParams } from 'react-router-dom'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Separator } from '@/components/ui/separator'; import EmotionPicker from '../components/EmotionPicker'; import GalleryPreview from '../components/GalleryPreview'; import { useGuestIdentity } from '../context/GuestIdentityContext'; import { useEventStats } from '../context/EventStatsContext'; import { useEventData } from '../hooks/useEventData'; import { useGuestTaskProgress } from '../hooks/useGuestTaskProgress'; import { Sparkles, UploadCloud, Images, CheckCircle2, Users, TimerReset } from 'lucide-react'; export default function HomePage() { const { slug } = useParams<{ slug: string }>(); const { name, hydrated } = useGuestIdentity(); const stats = useEventStats(); const { event } = useEventData(); const { completedCount } = useGuestTaskProgress(slug); if (!slug) return null; const displayName = hydrated && name ? name : 'Gast'; const latestUploadText = formatLatestUpload(stats.latestPhotoAt); const primaryActions: Array<{ to: string; label: string; description: string; icon: React.ReactNode }> = [ { to: 'tasks', label: 'Aufgabe ziehen', description: 'Hol dir deine naechste Challenge', icon: , }, { to: 'upload', label: 'Direkt hochladen', description: 'Teile deine neuesten Fotos', icon: , }, { to: 'gallery', label: 'Galerie ansehen', description: 'Lass dich von anderen inspirieren', icon: , }, ]; const checklistItems = [ 'Aufgabe auswaehlen oder starten', 'Emotion festhalten und Foto schiessen', 'Bild hochladen und Credits sammeln', ]; return (
} label="Gleichzeitig online" value={`${stats.onlineGuests}`} /> } label="Aufgaben gelöst" value={`${stats.tasksSolved}`} /> } label="Letzter Upload" value={latestUploadText} /> } label="Deine erledigten Aufgaben" value={`${completedCount}`} />

Deine Aktionen

Waehle aus, womit du starten willst
{primaryActions.map((action) => (
{action.icon}
{action.label} {action.description}
))}
Dein Fortschritt Halte dich an diese drei kurzen Schritte fuer die besten Ergebnisse. {checklistItems.map((item) => (
{item}
))}
); } function HeroCard({ name, eventName, tasksCompleted }: { name: string; eventName: string; tasksCompleted: number }) { const progressMessage = tasksCompleted > 0 ? `Schon ${tasksCompleted} Aufgaben erledigt - weiter so!` : 'Starte mit deiner ersten Aufgabe - wir zählen auf dich!'; return ( Willkommen zur Party Hey {name}!

Du bist bereit für "{eventName}". Fang die Highlights des Events ein und teile sie mit allen Gästen.

{progressMessage}

); } function StatTile({ icon, label, value }: { icon: React.ReactNode; label: string; value: string }) { return (
{icon}
{label} {value}
); } function formatLatestUpload(isoDate: string | null) { if (!isoDate) { return 'Noch kein Upload'; } const date = new Date(isoDate); if (Number.isNaN(date.getTime())) { return 'Noch kein Upload'; } const diffMs = Date.now() - date.getTime(); const diffMinutes = Math.round(diffMs / 60000); if (diffMinutes < 1) { return 'Gerade eben'; } if (diffMinutes < 60) { return `vor ${diffMinutes} Min`; } const diffHours = Math.round(diffMinutes / 60); if (diffHours < 24) { return `vor ${diffHours} Std`; } const diffDays = Math.round(diffHours / 24); return `vor ${diffDays} Tagen`; }