'use client'; import { useState, useEffect } from 'react'; import { useParams, useSearchParams } from 'next/navigation'; 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 { LeagueDetailViewModel } from '@/lib/view-models/LeagueDetailViewModel'; import { useServices } from '@/lib/services/ServiceProvider'; import { Trophy, Users, Calendar, Eye, TrendingUp, Download, Image as ImageIcon, ExternalLink, ChevronRight, Star, Clock, CheckCircle2, Flag, Car, BarChart3, ArrowUpRight, Megaphone, CreditCard, FileText } from 'lucide-react'; type TabType = 'overview' | 'drivers' | 'races' | 'sponsor'; export default function SponsorLeagueDetailPage() { const params = useParams(); const searchParams = useSearchParams(); const shouldReduceMotion = useReducedMotion(); const { sponsorService } = useServices(); const showSponsorAction = searchParams.get('action') === 'sponsor'; const [activeTab, setActiveTab] = useState(showSponsorAction ? 'sponsor' : 'overview'); const [selectedTier, setSelectedTier] = useState<'main' | 'secondary'>('main'); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const leagueId = params.id as string; useEffect(() => { const loadLeagueDetail = async () => { try { const leagueData = await sponsorService.getLeagueDetail(leagueId); setData(new LeagueDetailViewModel(leagueData)); } catch (err) { console.error('Error loading league detail:', err); setError('Failed to load league detail'); } finally { setLoading(false); } }; if (leagueId) { loadLeagueDetail(); } }, [leagueId, sponsorService]); if (loading) { return (

Loading league details...

); } if (error || !data) { return (

{error || 'No league data available'}

); } const league = data.league; const config = league.tierConfig; return (
{/* Breadcrumb */}
Dashboard Leagues {data.league.name}
{/* Header */}
⭐ {data.league.tier} Active Season
{league.rating}

{data.league.name}

{data.league.game} • {data.league.season} • {data.league.completedRaces}/{data.league.races} races completed

{data.league.description}

{(league.sponsorSlots.main.available || league.sponsorSlots.secondary.available > 0) && ( )}
{/* Quick Stats */}
{data.league.formattedTotalImpressions}
Total Views
{data.league.formattedAvgViewsPerRace}
Avg/Race
{data.league.drivers}
Drivers
{data.league.engagement}%
Engagement
{data.league.racesLeft}
Races Left
{/* Tabs */}
{(['overview', 'drivers', 'races', 'sponsor'] as const).map((tab) => ( ))}
{/* Tab Content */} {activeTab === 'overview' && (

League Information

Platform {data.league.game}
Season {league.season}
Duration Oct 2025 - Feb 2026
Drivers {league.drivers}
Races {league.races}

Sponsorship Value

Total Season Views {data.league.formattedTotalImpressions}
Projected Total {data.league.formattedProjectedTotal}
Main Sponsor CPM {data.league.formattedMainSponsorCpm}
Engagement Rate {league.engagement}%
League Rating
{league.rating}/5.0
{/* Next Race */} {league.nextRace && (

Next Race

{league.nextRace.name}

{league.nextRace.date}

)}
)} {activeTab === 'drivers' && (

Championship Standings

Top drivers carrying sponsor branding

{data.drivers.map((driver) => (
{driver.position}
{driver.name}
{driver.team} • {driver.country}
{driver.races}
races
{driver.formattedImpressions}
views
))}
)} {activeTab === 'races' && (

Race Calendar

Season schedule with view statistics

{data.races.map((race) => (
{race.name}
{race.formattedDate}
{race.status === 'completed' ? (
{race.views.toLocaleString()}
views
) : ( Upcoming )}
))}
)} {activeTab === 'sponsor' && (
{/* Tier Selection */}
{/* Main Sponsor */} league.sponsorSlots.main.available && setSelectedTier('main')} >

Main Sponsor

Primary branding position

{league.sponsorSlots.main.available ? ( Available ) : ( Filled )}
${league.sponsorSlots.main.price} /season
    {league.sponsorSlots.main.benefits.map((benefit, i) => (
  • {benefit}
  • ))}
{selectedTier === 'main' && league.sponsorSlots.main.available && (
)}
{/* Secondary Sponsor */} league.sponsorSlots.secondary.available > 0 && setSelectedTier('secondary')} >

Secondary Sponsor

Supporting branding position

{league.sponsorSlots.secondary.available > 0 ? ( {league.sponsorSlots.secondary.available}/{league.sponsorSlots.secondary.total} Available ) : ( Full )}
${league.sponsorSlots.secondary.price} /season
    {league.sponsorSlots.secondary.benefits.map((benefit, i) => (
  • {benefit}
  • ))}
{selectedTier === 'secondary' && league.sponsorSlots.secondary.available > 0 && (
)}
{/* Checkout Summary */}

Sponsorship Summary

Selected Tier {selectedTier} Sponsor
Season Price ${selectedTier === 'main' ? league.sponsorSlots.main.price : league.sponsorSlots.secondary.price}
Platform Fee ({siteConfig.fees.platformFeePercent}%) ${((selectedTier === 'main' ? league.sponsorSlots.main.price : league.sponsorSlots.secondary.price) * siteConfig.fees.platformFeePercent / 100).toFixed(2)}
Total (excl. VAT) ${((selectedTier === 'main' ? league.sponsorSlots.main.price : league.sponsorSlots.secondary.price) * (1 + siteConfig.fees.platformFeePercent / 100)).toFixed(2)}

{siteConfig.vat.notice}

)}
); }