"use client" import { useState, useEffect } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Badge } from "@/components/ui/badge"; import { useToast } from "@/hooks/use-toast"; import { Skeleton } from "@/components/ui/skeleton"; import { Package } from "lucide-react"; import { getProductPerformanceWithStore, type ProductPerformance } from "@/lib/services/analytics-service"; import { formatGBP } from "@/utils/format"; export default function ProductPerformanceChart() { const [data, setData] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const { toast } = useToast(); useEffect(() => { const fetchProductData = async () => { try { setIsLoading(true); setError(null); const response = await getProductPerformanceWithStore(); setData(response); } catch (err) { console.error('Error fetching product performance:', err); setError('Failed to load product data'); toast({ title: "Error", description: "Failed to load product performance data.", variant: "destructive", }); } finally { setIsLoading(false); } }; fetchProductData(); }, [toast]); const getStockStatusColor = (status: string) => { switch (status) { case 'in_stock': return 'bg-green-100 text-green-800'; case 'low_stock': return 'bg-yellow-100 text-yellow-800'; case 'out_of_stock': return 'bg-red-100 text-red-800'; default: return 'bg-gray-100 text-gray-800'; } }; const getStockStatusText = (status: string) => { switch (status) { case 'in_stock': return 'In Stock'; case 'low_stock': return 'Low Stock'; case 'out_of_stock': return 'Out of Stock'; default: return 'Unknown'; } }; if (isLoading) { return ( Product Performance Top performing products by revenue and sales
{[...Array(5)].map((_, i) => (
))}
); } if (error) { return ( Product Performance

Failed to load product data

); } if (data.length === 0) { return ( Product Performance Top performing products by revenue and sales

No product performance data available

Start selling products to see performance metrics

); } return ( Product Performance Top performing products by revenue and sales Product Stock Sold Revenue Orders Avg Price {data.map((product) => (
{product.name}
{product.unitType}
{getStockStatusText(product.stockStatus)} {product.currentStock} available
{product.totalSold.toFixed(2)} {formatGBP(product.totalRevenue)} {product.orderCount} {formatGBP(product.averagePrice)} ))}
); }