'use client'; import { useState, useMemo } from 'react'; import { motion, useReducedMotion } from 'framer-motion'; import Link from 'next/link'; import Card from '@/components/ui/Card'; import Button from '@/components/ui/Button'; import { siteConfig } from '@/lib/siteConfig'; import { Trophy, Users, Eye, Search, Star, ChevronRight, Filter, Car, Flag, TrendingUp, CheckCircle2, Clock, Megaphone, ArrowUpDown } from 'lucide-react'; 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; tierConfig: any; statusConfig: any; } type SortOption = 'rating' | 'drivers' | 'price' | 'views'; type TierFilter = 'all' | 'premium' | 'standard' | 'starter'; type AvailabilityFilter = 'all' | 'main' | 'secondary'; interface SponsorLeaguesTemplateProps { data: { leagues: AvailableLeague[]; stats: { total: number; mainAvailable: number; secondaryAvailable: number; totalDrivers: number; avgCpm: number; }; }; } function LeagueCard({ league, index }: { league: AvailableLeague; index: number }) { const shouldReduceMotion = useReducedMotion(); const tierConfig = { premium: { bg: 'bg-gradient-to-br from-yellow-500/10 to-amber-500/5', border: 'border-yellow-500/30', badge: 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30', icon: '⭐' }, standard: { bg: 'bg-gradient-to-br from-primary-blue/10 to-cyan-500/5', border: 'border-primary-blue/30', badge: 'bg-primary-blue/20 text-primary-blue border-primary-blue/30', icon: '🏆' }, starter: { bg: 'bg-gradient-to-br from-gray-500/10 to-slate-500/5', border: 'border-gray-500/30', badge: 'bg-gray-500/20 text-gray-400 border-gray-500/30', icon: '🚀' }, }; const statusConfig = { active: { color: 'text-performance-green', bg: 'bg-performance-green/10', label: 'Active Season' }, upcoming: { color: 'text-warning-amber', bg: 'bg-warning-amber/10', label: 'Starting Soon' }, completed: { color: 'text-gray-400', bg: 'bg-gray-400/10', label: 'Season Ended' }, }; const config = league.tierConfig; const status = league.statusConfig; return (
{/* Header */}
{config.icon} {league.tier} {status.label}

{league.name}

{league.game}

{league.rating}
{/* Description */}

{league.description}

{/* Stats Grid */}
{league.drivers}
Drivers
{league.formattedAvgViews}
Avg Views
{league.formattedCpm}
CPM
{/* Next Race */} {league.nextRace && (
Next: {league.nextRace}
)} {/* Sponsorship Slots */}
Main Sponsor
{league.mainSponsorSlot.available ? ( ${league.mainSponsorSlot.price}/season ) : ( Filled )}
0 ? 'bg-performance-green' : 'bg-racing-red'}`} /> Secondary Slots
{league.secondarySlots.available > 0 ? ( {league.secondarySlots.available}/{league.secondarySlots.total} @ ${league.secondarySlots.price} ) : ( Full )}
{/* Actions */}
{(league.mainSponsorSlot.available || league.secondarySlots.available > 0) && ( )}
); } export function SponsorLeaguesTemplate({ data }: SponsorLeaguesTemplateProps) { const shouldReduceMotion = useReducedMotion(); 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 = data.leagues .filter((league: any) => { 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: any, b: any) => { 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; } }); const stats = data.stats; return (
{/* Breadcrumb */}
Dashboard Browse Leagues
{/* Header */}

League Sponsorship Marketplace

Discover racing leagues looking for sponsors. All prices shown exclude VAT.

{/* Stats Overview */}
{stats.total}
Leagues
{stats.mainAvailable}
Main Slots
{stats.secondaryAvailable}
Secondary Slots
{stats.totalDrivers}
Total Drivers
${stats.avgCpm}
Avg CPM
{/* Filters */}
{/* Search */}
setSearchQuery(e.target.value)} className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-charcoal-outline bg-iron-gray text-white placeholder-gray-500 focus:border-primary-blue focus:outline-none" />
{/* Tier Filter */} {/* Availability Filter */} {/* Sort */}
{/* Results Count */}

Showing {filteredLeagues.length} of {data.leagues.length} leagues

{/* League Grid */} {filteredLeagues.length > 0 ? (
{filteredLeagues.map((league: any, index: number) => ( ))}
) : (

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}

); }