'use client'; import { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { RefreshCw, Calendar, Clock, MapPin } from 'lucide-react'; import { format } from 'date-fns'; interface Booking { id: string; date: string; startTime: string; endTime: string; status: string; notes?: string; createdAt: Date; court: { id: string; name: string; }; user: { id: string; name: string; surname: string; email: string; }; } export function AdminRecentBookings() { const [bookings, setBookings] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchBookings(); }, []); const fetchBookings = async () => { try { setLoading(true); const response = await fetch('/api/admin/recent-bookings?limit=5'); if (response.ok) { const data = await response.json(); setBookings(data.bookings || []); } else { console.error('Failed to fetch bookings'); } } catch (error) { console.error('Error fetching bookings:', error); } finally { setLoading(false); } }; const formatDate = (dateStr: string) => { try { const date = new Date(dateStr); return format(date, 'MMM dd'); } catch { return dateStr; } }; const getStatusBadgeColor = (status: string) => { switch (status) { case 'active': return 'bg-green-100 text-green-800'; case 'cancelled': return 'bg-red-100 text-red-800'; default: return 'bg-gray-100 text-gray-800'; } }; if (loading) { return ( Recent Bookings
{[1, 2, 3].map((i) => (
))}
); } return ( Recent Bookings {bookings.length === 0 ? (
No recent bookings found.
) : (
{bookings.map((booking) => (

{booking.user.name} {booking.user.surname}

{booking.user.email}

{booking.status}
{booking.court.name}
{formatDate(booking.date)}
{booking.startTime} - {booking.endTime}
{booking.notes && (

{booking.notes}

)}
))}
)}
); }