"use client" import { useState, useEffect } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { useToast } from "@/hooks/use-toast"; import { Skeleton } from "@/components/ui/skeleton"; import { TrendingUp, DollarSign } from "lucide-react"; import { getRevenueTrendsWithStore, type RevenueData } from "@/lib/services/analytics-service"; import { formatGBP } from "@/utils/format"; interface RevenueChartProps { timeRange: string; } export default function RevenueChart({ timeRange }: RevenueChartProps) { const [data, setData] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const { toast } = useToast(); useEffect(() => { const fetchRevenueData = async () => { try { setIsLoading(true); setError(null); const response = await getRevenueTrendsWithStore(timeRange); setData(response); } catch (err) { console.error('Error fetching revenue data:', err); setError('Failed to load revenue data'); toast({ title: "Error", description: "Failed to load revenue trends data.", variant: "destructive", }); } finally { setIsLoading(false); } }; fetchRevenueData(); }, [timeRange, toast]); const totalRevenue = data.reduce((sum, item) => sum + item.revenue, 0); const totalOrders = data.reduce((sum, item) => sum + item.orders, 0); const averageRevenue = data.length > 0 ? totalRevenue / data.length : 0; const formatDate = (item: RevenueData) => { const date = new Date(item._id.year, item._id.month - 1, item._id.day); return date.toLocaleDateString('en-GB', { month: 'short', day: 'numeric' }); }; if (isLoading) { return ( Revenue Trends Revenue performance over the selected time period
); } if (error) { return ( Revenue Trends

Failed to load revenue data

); } if (data.length === 0) { return ( Revenue Trends Revenue performance over the selected time period

No revenue data available for this period

); } return ( Revenue Trends Revenue performance over the selected time period {/* Simple bar chart representation */}
{data.map((item, index) => { const maxRevenue = Math.max(...data.map(d => d.revenue)); const height = maxRevenue > 0 ? (item.revenue / maxRevenue) * 100 : 0; return (
{formatDate(item)}
); })}
{/* Summary stats */}
{formatGBP(totalRevenue)}
Total Revenue
{totalOrders}
Total Orders
{formatGBP(averageRevenue)}
Avg Daily Revenue
); }