import { useEffect, useState } from 'react'; import { supabase } from '@/lib/supabaseClient'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Progress } from '@/components/ui/progress'; import { Star } from 'lucide-react'; interface RatingDistributionProps { rideId: string; totalReviews: number; averageRating: number; } interface RatingCount { rating: number; count: number; } export function RatingDistribution({ rideId, totalReviews, averageRating }: RatingDistributionProps) { const [distribution, setDistribution] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function fetchDistribution() { const { data, error } = await supabase .from('reviews') .select('rating') .eq('ride_id', rideId) .eq('moderation_status', 'approved'); if (!error && data) { const counts = [5, 4, 3, 2, 1].map(rating => ({ rating, count: data.filter(r => r.rating === rating).length })); setDistribution(counts); } setLoading(false); } fetchDistribution(); }, [rideId]); if (loading) { return null; } return ( Rating Breakdown
{averageRating.toFixed(1)}
Based on {totalReviews} {totalReviews === 1 ? 'review' : 'reviews'}
{distribution.map(({ rating, count }) => { const percentage = totalReviews > 0 ? (count / totalReviews) * 100 : 0; return (
{rating}
{count}
); })}
); }