"use client" import { useState, useEffect } from "react" import { useAuth } from "@/contexts/supabase-auth-context" import { useRouter } from "next/navigation" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { BarChart3, Download, FileText, TrendingUp, Package, DollarSign, Calendar, ArrowLeft } from "lucide-react" import Link from "next/link" import { retailerService, componentService } from "@/lib/database" import { formatCurrency } from "@/lib/currency" import { supabase } from "@/lib/supabase" interface ComponentReport { component_id: number component_name: string component_price: number | null availability_status: string | null component_categories: { category_name: string } retailers: { retailer_name: string } | null } export default function RetailerReportsPage() { const { user } = useAuth() const router = useRouter() const [components, setComponents] = useState([]) const [loading, setLoading] = useState(true) const [selectedRetailer, setSelectedRetailer] = useState("all") const [reportType, setReportType] = useState<"inventory" | "sales" | "performance">("inventory") useEffect(() => { if (user && user.user_type !== 'retailer' && user.user_type !== 'admin') { router.push('/dashboard') } }, [user, router]) useEffect(() => { if (user?.user_type === 'retailer' || user?.user_type === 'admin') { loadComponents() } }, [user, selectedRetailer]) const loadComponents = async () => { try { setLoading(true) const { data, error } = await supabase .from('components') .select(` component_id, component_name, component_price, availability_status, component_categories(category_name), retailers(retailer_name, retailer_id) `) .order('component_name') if (error) throw error let filteredData = data if (selectedRetailer !== 'all') { filteredData = data.filter((comp: any) => comp.retailers?.retailer_id?.toString() === selectedRetailer ) } setComponents(filteredData as ComponentReport[]) } catch (error) { console.error("Error loading components:", error) } finally { setLoading(false) } } const generateReport = () => { const reportData = { type: reportType, date: new Date().toISOString(), components: components.map(comp => ({ name: comp.component_name, price: comp.component_price, status: comp.availability_status, category: comp.component_categories?.category_name, retailer: comp.retailers?.retailer_name })) } const blob = new Blob([JSON.stringify(reportData, null, 2)], { type: 'application/json' }) const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = `retailer-report-${reportType}-${new Date().toISOString().split('T')[0]}.json` document.body.appendChild(a) a.click() document.body.removeChild(a) URL.revokeObjectURL(url) } const totalValue = components.reduce((sum, comp) => sum + (comp.component_price || 0), 0) const inStockCount = components.filter(comp => comp.availability_status === 'in_stock').length const outOfStockCount = components.filter(comp => comp.availability_status === 'out_of_stock').length return (

Retailer Reports

View and generate reports on components

Total Components
{components.length}

{formatCurrency(totalValue)} total value

In Stock
{inStockCount}

{components.length > 0 ? Math.round((inStockCount / components.length) * 100) : 0}% of total

Out of Stock
{outOfStockCount}

{components.length > 0 ? Math.round((outOfStockCount / components.length) * 100) : 0}% of total

Generate Report Select report type and generate
Component Inventory View all components with details {loading ? (
Loading components...
) : (
{components.map((component) => (

{component.component_name}

{component.component_categories?.category_name || 'Unknown'} {component.availability_status && ( {component.availability_status.replace('_', ' ')} )}
Price: {formatCurrency(component.component_price || 0)} {component.retailers && ( Retailer: {component.retailers.retailer_name} )}
))} {components.length === 0 && (
No components found
)}
)}
) }