import { MapPin, Star, Users, Clock, Castle, FerrisWheel, Waves, Tent } from 'lucide-react'; import { formatLocationShort } from '@/lib/locationFormatter'; import { useNavigate } from 'react-router-dom'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Park } from '@/types/database'; import { getCloudflareImageUrl } from '@/lib/cloudflareImageUtils'; interface ParkCardProps { park: Park; } export function ParkCard({ park }: ParkCardProps) { const navigate = useNavigate(); const handleClick = () => { navigate(`/parks/${park.slug}`); }; const getStatusColor = (status: string) => { switch (status) { case 'operating': return 'bg-green-500/50 text-green-200 border-green-500/50'; case 'seasonal': return 'bg-yellow-500/50 text-yellow-200 border-yellow-500/50'; case 'under_construction': return 'bg-blue-500/50 text-blue-200 border-blue-500/50'; default: return 'bg-red-500/50 text-red-200 border-red-500/50'; } }; const getStatusIcon = (status: string) => { switch (status) { case 'operating': return ; case 'seasonal': return ; case 'under_construction': return ; default: return ; } }; const getParkTypeIcon = (type: string) => { switch (type) { case 'theme_park': return ; case 'amusement_park': return ; case 'water_park': return ; case 'family_entertainment': return ; default: return ; } }; const formatParkType = (type: string) => { return type.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' '); }; return
{/* Image Placeholder with Gradient */}
{(park.card_image_url || park.card_image_id) ? ( {park.name} ) : (
{getParkTypeIcon(park.park_type)}
)} {/* Gradient Overlay */}
{/* Status Badge */} {getStatusIcon(park.status)} {park.status.replace('_', ' ').toUpperCase()}
{/* Header */}

{park.name}

{park.location && (
{formatLocationShort(park.location)}
)}
{/* Stats & Rating */}
{(park.ride_count != null && park.ride_count > 0) && (
{park.ride_count} rides
)}
{(park.average_rating != null && park.average_rating > 0) && (
{park.average_rating.toFixed(1)} {(park.review_count != null && park.review_count > 0) && ( ({park.review_count}) )}
)}
; }