'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}
}>
View League
{(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}
}>
Request Sponsorship
}>
Download Info Pack
)}
);
}
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}
);
}