import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Header } from '@/components/layout/Header'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Separator } from '@/components/ui/separator'; import { MapPin, Star, Clock, Phone, Globe, Calendar, ArrowLeft, Users, Zap, Camera, Castle, FerrisWheel, Waves, Tent, Theater, Train } from 'lucide-react'; import { ReviewsSection } from '@/components/reviews/ReviewsSection'; import { MeasurementDisplay } from '@/components/ui/measurement-display'; import { Park, Ride } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; export default function ParkDetail() { const { slug } = useParams<{ slug: string; }>(); const navigate = useNavigate(); const [park, setPark] = useState(null); const [rides, setRides] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { if (slug) { fetchParkData(); } }, [slug]); const fetchParkData = async () => { try { // Fetch park details const { data: parkData } = await supabase.from('parks').select(` *, location:locations(*), operator:companies!parks_operator_id_fkey(*), property_owner:companies!parks_property_owner_id_fkey(*) `).eq('slug', slug).maybeSingle(); if (parkData) { setPark(parkData); // Fetch park rides const { data: ridesData } = await supabase.from('rides').select(`*`).eq('park_id', parkData.id).order('name'); setRides(ridesData || []); } } catch (error) { console.error('Error fetching park data:', error); } finally { setLoading(false); } }; const getStatusColor = (status: string) => { switch (status) { case 'operating': return 'bg-green-500/20 text-green-400 border-green-500/30'; case 'seasonal': return 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30'; case 'under_construction': return 'bg-blue-500/20 text-blue-400 border-blue-500/30'; default: return 'bg-red-500/20 text-red-400 border-red-500/30'; } }; 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(' '); }; const getRideIcon = (category: string) => { switch (category) { case 'roller_coaster': return ; case 'water_ride': return ; case 'dark_ride': return ; case 'flat_ride': return ; case 'kiddie_ride': return ; case 'transportation': return ; default: return ; } }; if (loading) { return
; } if (!park) { return

Park Not Found

The park you're looking for doesn't exist or has been removed.

; } return
{/* Back Button */} {/* Hero Section */}
{park.banner_image_url ? {park.name} :
{getParkTypeIcon(park.park_type)}
}
{/* Park Title Overlay */}
{park.status.replace('_', ' ').toUpperCase()} {formatParkType(park.park_type)}

{park.name}

{park.location &&
{park.location.city && `${park.location.city}, `}{park.location.country}
}
{park.average_rating > 0 &&
{park.average_rating.toFixed(1)}
{park.review_count} reviews
}
{/* Quick Stats */}
{/* Background decorative elements */}
{/* Total Rides */}
{park.ride_count}
Total Rides
{/* Roller Coasters */}
{park.coaster_count}
Roller Coasters
{/* Reviews */}
{park.review_count}
Reviews
{park.average_rating > 0 &&
{park.average_rating.toFixed(1)}
}
{/* Operating Status */}
{park.opening_date ? : }
{park.opening_date ? `Opened ${new Date(park.opening_date).getFullYear()}` : 'Opening Soon'}
{/* Main Content */} Overview Rides ({rides.length}) Reviews Photos
{/* Description */} {park.description && About {park.name}

{park.description}

} {/* Top Rides Preview */} Featured Rides
{rides.slice(0, 4).map(ride =>
navigate(`/parks/${park.slug}/rides/${ride.slug}`)}>
{getRideIcon(ride.category)}

{ride.name}

{ride.category.replace('_', ' ')}

{ride.average_rating > 0 &&
{ride.average_rating.toFixed(1)}
}
)}
{/* Park Information */} Park Information {park.opening_date &&
Opened
{new Date(park.opening_date).getFullYear()}
} {park.operator &&
Operator
{park.operator.name}
} {park.website_url && } {park.phone &&
Phone
{park.phone}
}
Location
{park.location &&
{park.location.city &&
{park.location.city}
} {park.location.state_province &&
{park.location.state_province}
}
{park.location.country}
}
{rides.map(ride => ( navigate(`/parks/${park.slug}/rides/${ride.slug}`)} >
{ride.image_url ? ( {ride.name} ) : (
{getRideIcon(ride.category)}
)} {/* Status Badge */}
{ride.status}
{/* Rating */} {ride.average_rating > 0 && (
{ride.average_rating.toFixed(1)}
)}
{/* Title and Category */}

{ride.name}

{getRideIcon(ride.category)}

{ride.category.replace('_', ' ')}

{/* Description */} {ride.description && (

{ride.description}

)} {/* Stats */}
{ride.max_speed_kmh && ( )} {ride.max_height_meters && ( )} {ride.inversions > 0 && ( {ride.inversions} inversions )}
))}

Photo Gallery Coming Soon

Photo galleries and media uploads will be available soon

; }