import { useState, useEffect } from 'react'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { ParkCard } from '@/components/parks/ParkCard'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Star, TrendingUp, Plus, MapPin, Clock, Zap } from 'lucide-react'; import { Park, Ride } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; export function ContentTabs() { const [popularParks, setPopularParks] = useState([]); const [trendingParks, setTrendingParks] = useState([]); const [popularRides, setPopularRides] = useState([]); const [trendingRides, setTrendingRides] = useState([]); const [recentParks, setRecentParks] = useState([]); const [recentRides, setRecentRides] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchContent(); }, []); const fetchContent = async () => { try { // Most Popular Parks (by rating) const { data: popular } = await supabase .from('parks') .select(`*, location:locations(*), operator:companies!parks_operator_id_fkey(*)`) .order('average_rating', { ascending: false }) .limit(12); // Trending Parks (by review count) const { data: trending } = await supabase .from('parks') .select(`*, location:locations(*), operator:companies!parks_operator_id_fkey(*)`) .order('review_count', { ascending: false }) .limit(12); // Recently Added Parks const { data: recent } = await supabase .from('parks') .select(`*, location:locations(*), operator:companies!parks_operator_id_fkey(*)`) .order('created_at', { ascending: false }) .limit(12); // Popular Rides (by rating) const { data: popularRidesData } = await supabase .from('rides') .select(`*, park:parks!inner(name, slug, location:locations(*))`) .order('average_rating', { ascending: false }) .limit(12); // Trending Rides (by review count) const { data: trendingRidesData } = await supabase .from('rides') .select(`*, park:parks!inner(name, slug, location:locations(*))`) .order('review_count', { ascending: false }) .limit(12); // Recently Added Rides const { data: recentRidesData } = await supabase .from('rides') .select(`*, park:parks!inner(name, slug, location:locations(*))`) .order('created_at', { ascending: false }) .limit(12); setPopularParks(popular || []); setTrendingParks(trending || []); setRecentParks(recent || []); setPopularRides(popularRidesData || []); setTrendingRides(trendingRidesData || []); setRecentRides(recentRidesData || []); } catch (error) { console.error('Error fetching content:', error); } finally { setLoading(false); } }; 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 '🎢'; } }; 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 formatCategory = (category: string) => { return category.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1) ).join(' '); }; const RideCard = ({ ride }: { ride: Ride }) => (
{/* Image/Icon Section */}
{ride.image_url ? ( {ride.name} ) : (
{getRideIcon(ride.category)}
)} {/* Gradient Overlay */}
{/* Status Badge */} {ride.status.replace('_', ' ').toUpperCase()}
{/* Header */}

{ride.name}

{getRideIcon(ride.category)}
{ride.park?.name && (
{ride.park.name} {ride.park.location?.city && `, ${ride.park.location.city}`}
)}
{/* Description */} {ride.description && (

{ride.description}

)} {/* Category Badge */} {formatCategory(ride.category)} {/* Stats */}
{ride.max_speed_kmh && (
{ride.max_speed_kmh} km/h
)} {ride.max_height_meters && (
{ride.max_height_meters} m
)} {ride.duration_seconds && (
{Math.floor(ride.duration_seconds / 60)} min
)}
{ride.average_rating > 0 && (
{ride.average_rating.toFixed(1)} ({ride.review_count})
)}
{/* Action Button */}
); if (loading) { return (
{[...Array(6)].map((_, i) => (
))}
); } return (
Popular Parks Trending Parks Popular Rides Trending Rides New Parks New Rides

Most Popular Parks

Highest rated theme parks worldwide

{popularParks.map((park) => ( ))}

Trending Parks

Most reviewed parks this month

{trendingParks.map((park) => ( ))}

Most Popular Rides

Highest rated attractions worldwide

{popularRides.map((ride) => ( ))}

Trending Rides

Most talked about attractions

{trendingRides.map((ride) => ( ))}

Recently Added Parks

Latest parks added to our database

{recentParks.map((park) => ( ))}

Recently Added Rides

Latest attractions added to our database

{recentRides.map((ride) => ( ))}
); }