'use client'; import { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Bell, Info, AlertTriangle, AlertCircle } from 'lucide-react'; interface Announcement { id: string; title: string; content: string; priority: 'low' | 'medium' | 'high'; isActive: boolean; expiresAt?: string; createdAt: string; } export function AnnouncementsList() { const [announcements, setAnnouncements] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchAnnouncements(); }, []); const fetchAnnouncements = async () => { try { setLoading(true); const response = await fetch('/api/admin/announcements'); if (response.ok) { const data = await response.json(); // Filter to show only active, non-expired announcements const activeAnnouncements = data.announcements.filter((announcement: Announcement) => { if (!announcement.isActive) return false; if (announcement.expiresAt && new Date(announcement.expiresAt) < new Date()) return false; return true; }); setAnnouncements(activeAnnouncements); } } catch (error) { console.error('Error fetching announcements:', error); // Fallback to default announcements if API fails setAnnouncements([ { id: '1', title: 'Welcome to Table Tennis Booking!', content: 'Book your favorite court slots up to 7 days in advance. Remember to arrive 5 minutes early for your booking.', priority: 'medium', isActive: true, createdAt: new Date().toISOString(), }, ]); } finally { setLoading(false); } }; const getPriorityIcon = (priority: string) => { switch (priority) { case 'high': return ; case 'medium': return ; default: return ; } }; const getPriorityColor = (priority: string) => { switch (priority) { case 'high': return 'bg-red-100 text-red-800 border-red-200'; case 'medium': return 'bg-yellow-100 text-yellow-800 border-yellow-200'; default: return 'bg-blue-100 text-blue-800 border-blue-200'; } }; return ( Announcements
{announcements .filter((a) => a.isActive) .map((announcement) => (
{getPriorityIcon(announcement.priority)}

{announcement.title}

{announcement.content}

{announcement.priority}
))} {announcements.filter((a) => a.isActive).length === 0 && (

No announcements at this time

)}
); }