'use client';
import { BillingSummaryPanel } from '@/components/sponsors/BillingSummaryPanel';
import { PricingTableShell, PricingTier } from '@/components/sponsors/PricingTableShell';
import { SponsorBrandingPreview } from '@/components/sponsors/SponsorBrandingPreview';
import { SponsorDashboardHeader } from '@/components/sponsors/SponsorDashboardHeader';
import { SponsorStatusChip } from '@/components/sponsors/SponsorStatusChip';
import { routes } from '@/lib/routing/RouteConfig';
import { siteConfig } from '@/lib/siteConfig';
import { Button } from '@/ui/Button';
import { Card } from '@/ui/Card';
import { Container } from '@/ui/Container';
import { Heading } from '@/ui/Heading';
import { Icon } from '@/ui/Icon';
import { Link } from '@/ui/Link';
import { Box } from '@/ui/primitives/Box';
import { Grid } from '@/ui/primitives/Grid';
import { GridItem } from '@/ui/primitives/GridItem';
import { Stack } from '@/ui/primitives/Stack';
import { Surface } from '@/ui/primitives/Surface';
import { Text } from '@/ui/Text';
import {
BarChart3,
Calendar,
CreditCard,
Eye,
FileText,
Flag,
Megaphone,
TrendingUp,
Trophy,
type LucideIcon
} from 'lucide-react';
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;
const billingStats: Array<{
label: string;
value: string | number;
icon: LucideIcon;
variant: 'info' | 'success' | 'warning' | 'default';
}> = [
{
label: 'Total Views',
value: league.formattedTotalImpressions,
icon: Eye,
variant: 'info',
},
{
label: 'Avg/Race',
value: league.formattedAvgViewsPerRace,
icon: TrendingUp,
variant: 'success',
},
{
label: 'Engagement',
value: `${league.engagement}%`,
icon: BarChart3,
variant: 'warning',
},
{
label: 'Races Left',
value: league.racesLeft,
icon: Calendar,
variant: 'default',
},
];
const pricingTiers: PricingTier[] = [
{
id: 'main',
name: 'Main Sponsor',
price: league.sponsorSlots.main.price,
period: 'Season',
description: 'Exclusive primary branding across all league assets.',
features: league.sponsorSlots.main.benefits,
available: league.sponsorSlots.main.available,
isPopular: true,
},
{
id: 'secondary',
name: 'Secondary Sponsor',
price: league.sponsorSlots.secondary.price,
period: 'Season',
description: 'Supporting branding on cars and broadcast overlays.',
features: league.sponsorSlots.secondary.benefits,
available: league.sponsorSlots.secondary.available > 0,
}
];
return (
{/* Breadcrumb */}
Dashboard
/
Leagues
/
{league.name}
{/* Header */}
console.log('Refresh')}
/>
{/* 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
) : (
)}
))}
)}
{activeTab === 'sponsor' && (
setSelectedTier(id as 'main' | '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 InfoRow({ label, value, color = 'text-white', last }: { label: string, value: string | number, color?: string, last?: boolean }) {
return (
{label}
{value}
);
}