'use client'; import React, { useState, useMemo } from 'react'; import { Card } from '@/ui/Card'; import { Button } from '@/ui/Button'; import { Heading } from '@/ui/Heading'; import { Box } from '@/ui/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { Link } from '@/ui/Link'; import { Container } from '@/ui/Container'; import { Grid } from '@/ui/Grid'; import { GridItem } from '@/ui/GridItem'; import { Surface } from '@/ui/Surface'; import { Icon } from '@/ui/Icon'; import { Trophy, Users, Search, ChevronRight, Car, Megaphone, } from 'lucide-react'; import { siteConfig } from '@/lib/siteConfig'; import { routes } from '@/lib/routing/RouteConfig'; import { AvailableLeagueCard } from '@/components/sponsors/AvailableLeagueCard'; interface AvailableLeague { id: string; name: string; game: string; drivers: number; avgViewsPerRace: number; mainSponsorSlot: { available: boolean; price: number }; secondarySlots: { available: number; total: number; price: number }; rating: number; tier: 'premium' | 'standard' | 'starter'; nextRace?: string; seasonStatus: 'active' | 'upcoming' | 'completed'; description: string; formattedAvgViews: string; formattedCpm: string; cpm: number; } type SortOption = 'rating' | 'drivers' | 'price' | 'views'; type TierFilter = 'all' | 'premium' | 'standard' | 'starter'; type AvailabilityFilter = 'all' | 'main' | 'secondary'; interface SponsorLeaguesTemplateProps { viewData: { leagues: AvailableLeague[]; stats: { total: number; mainAvailable: number; secondaryAvailable: number; totalDrivers: number; avgCpm: number; }; }; } export function SponsorLeaguesTemplate({ viewData }: SponsorLeaguesTemplateProps) { const [searchQuery, setSearchQuery] = useState(''); const [tierFilter, setTierFilter] = useState('all'); const [availabilityFilter, setAvailabilityFilter] = useState('all'); const [sortBy, setSortBy] = useState('rating'); // Filter and sort leagues const filteredLeagues = useMemo(() => { return viewData.leagues .filter((league) => { if (searchQuery && !league.name.toLowerCase().includes(searchQuery.toLowerCase())) { return false; } if (tierFilter !== 'all' && league.tier !== tierFilter) { return false; } if (availabilityFilter === 'main' && !league.mainSponsorSlot.available) { return false; } if (availabilityFilter === 'secondary' && league.secondarySlots.available === 0) { return false; } return true; }) .sort((a, b) => { switch (sortBy) { case 'rating': return b.rating - a.rating; case 'drivers': return b.drivers - a.drivers; case 'price': return a.mainSponsorSlot.price - b.mainSponsorSlot.price; case 'views': return b.avgViewsPerRace - a.avgViewsPerRace; default: return 0; } }); }, [viewData.leagues, searchQuery, tierFilter, availabilityFilter, sortBy]); const stats = viewData.stats; return ( {/* Breadcrumb */} Dashboard / Browse Leagues {/* Header */} }> League Sponsorship Marketplace Discover racing leagues looking for sponsors. All prices shown exclude VAT. {/* Stats Overview */} {/* Filters (Simplified for template) */} Use the search and filter options to find the perfect league for your brand. setSearchQuery(e.target.value)} className="w-full px-4 py-2 rounded-lg border border-charcoal-outline bg-iron-gray text-white placeholder-gray-500 focus:border-primary-blue focus:outline-none" /> {/* Selects would go here, using standard Select UI if available */} {/* Results Count */} Showing {filteredLeagues.length} of {viewData.leagues.length} leagues {/* League Grid */} {filteredLeagues.length > 0 ? ( {filteredLeagues.map((league) => ( ))} ) : ( No leagues found Try adjusting your filters to see more results )} {/* Platform Fee Notice */} Platform Fee A {siteConfig.fees.platformFeePercent}% platform fee applies to all sponsorship payments. {siteConfig.fees.description} ); } function StatCard({ label, value, color = 'text-white' }: { label: string, value: string | number, color?: string }) { return ( {value} {label} ); }