'use client'; import React from 'react'; import { Trophy, Users, Calendar, Eye, TrendingUp, ExternalLink, Star, Flag, BarChart3, Megaphone, CreditCard, FileText, type LucideIcon } from 'lucide-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 { Badge } from '@/ui/Badge'; import { SponsorTierCard } from '@/components/sponsors/SponsorTierCard'; import { siteConfig } from '@/lib/siteConfig'; import { routes } from '@/lib/routing/RouteConfig'; interface SponsorLeagueDetailViewData { league: { id: string; name: string; game: string; season: string; description: string; tier: 'premium' | 'standard' | 'starter'; rating: number; drivers: number; races: number; completedRaces: number; racesLeft: number; engagement: number; totalImpressions: number; formattedTotalImpressions: string; projectedTotal: number; formattedProjectedTotal: string; mainSponsorCpm: number; formattedMainSponsorCpm: string; avgViewsPerRace: number; formattedAvgViewsPerRace: string; nextRace?: { name: string; date: string; }; sponsorSlots: { main: { available: boolean; price: number; benefits: string[]; }; secondary: { available: number; total: number; price: number; benefits: string[]; }; }; tierConfig: { bgColor: string; color: string; border: string; }; }; drivers: Array<{ id: string; position: number; name: string; team: string; country: string; races: number; impressions: number; formattedImpressions: string; }>; races: Array<{ id: string; name: string; date: string; formattedDate: string; status: 'completed' | 'upcoming'; views: number; }>; } export type SponsorLeagueDetailTab = 'overview' | 'drivers' | 'races' | 'sponsor'; interface SponsorLeagueDetailTemplateProps { viewData: SponsorLeagueDetailViewData; activeTab: SponsorLeagueDetailTab; setActiveTab: (tab: SponsorLeagueDetailTab) => void; selectedTier: 'main' | 'secondary'; setSelectedTier: (tier: 'main' | 'secondary') => void; } export function SponsorLeagueDetailTemplate({ viewData, activeTab, setActiveTab, selectedTier, setSelectedTier }: SponsorLeagueDetailTemplateProps) { const league = viewData.league; return ( {/* Breadcrumb */} Dashboard / Leagues / {league.name} {/* Header */} ⭐ {league.tier} Active Season {league.rating} {league.name} {league.game} • {league.season} • {league.completedRaces}/{league.races} races completed {league.description} {(league.sponsorSlots.main.available || league.sponsorSlots.secondary.available > 0) && ( )} {/* Quick Stats */} {/* Tabs */} {(['overview', 'drivers', 'races', 'sponsor'] as const).map((tab) => ( setActiveTab(tab)} pb={3} cursor="pointer" borderBottom={activeTab === tab} borderColor={activeTab === tab ? 'border-primary-blue' : 'border-transparent'} color={activeTab === tab ? 'text-primary-blue' : 'text-gray-400'} > {tab === 'sponsor' ? '🎯 Become a Sponsor' : tab} ))} {/* Tab Content */} {activeTab === 'overview' && ( }> League Information }> Sponsorship Value {league.nextRace && ( }> Next Race {league.nextRace.name} {league.nextRace.date} )} )} {activeTab === 'drivers' && ( Championship Standings Top drivers carrying sponsor branding {viewData.drivers.map((driver, index) => ( {driver.position} {driver.name} {driver.team} • {driver.country} {driver.races} races {driver.formattedImpressions} views ))} )} {activeTab === 'races' && ( Race Calendar Season schedule with view statistics {viewData.races.map((race, index) => ( {race.name} {race.formattedDate} {race.status === 'completed' ? ( {race.views.toLocaleString()} views ) : ( Upcoming )} ))} )} {activeTab === 'sponsor' && ( setSelectedTier('main')} /> 0} availableCount={league.sponsorSlots.secondary.available} totalCount={league.sponsorSlots.secondary.total} price={league.sponsorSlots.secondary.price} benefits={league.sponsorSlots.secondary.benefits} isSelected={selectedTier === 'secondary'} onClick={() => setSelectedTier('secondary')} /> }> Sponsorship Summary Total (excl. VAT) ${((selectedTier === 'main' ? league.sponsorSlots.main.price : league.sponsorSlots.secondary.price) * (1 + siteConfig.fees.platformFeePercent / 100)).toFixed(2)} {siteConfig.vat.notice} )} ); } function StatCard({ icon, label, value, color }: { icon: LucideIcon, label: string, value: string | number, color: string }) { return ( {value} {label} ); } function InfoRow({ label, value, color = 'text-white', last }: { label: string, value: string | number, color?: string, last?: boolean }) { return ( {label} {value} ); }