'use client'; import { useState, useEffect } from 'react'; import { motion, useReducedMotion, AnimatePresence } from 'framer-motion'; import Card from '@/components/ui/Card'; import Button from '@/components/ui/Button'; import StatusBadge from '@/components/ui/StatusBadge'; import InfoBanner from '@/components/ui/InfoBanner'; import { BarChart3, Eye, Users, Trophy, TrendingUp, Calendar, DollarSign, Target, ArrowUpRight, ArrowDownRight, ExternalLink, Loader2, Car, Flag, Megaphone, ChevronRight, Plus, Bell, Settings, CreditCard, FileText, RefreshCw } from 'lucide-react'; import Link from 'next/link'; // Static mock data for prototype const MOCK_SPONSOR_DATA = { sponsorId: 'demo-sponsor-1', sponsorName: 'Acme Racing Co.', metrics: { totalImpressions: 127450, impressionsChange: 12.5, uniqueViewers: 34200, viewersChange: 8.3, activeSponsors: 7, totalInvestment: 4850, avgEngagement: 4.2, engagementChange: 0.8, }, sponsorships: { leagues: [ { id: 'l1', name: 'GT3 Masters Championship', tier: 'main', drivers: 48, impressions: 45200, status: 'active' }, { id: 'l2', name: 'Endurance Pro Series', tier: 'secondary', drivers: 72, impressions: 38400, status: 'active' }, ], teams: [ { id: 't1', name: 'Velocity Racing', drivers: 4, impressions: 12300, status: 'active' }, { id: 't2', name: 'Storm Motorsport', drivers: 3, impressions: 8900, status: 'active' }, ], drivers: [ { id: 'd1', name: 'Max Velocity', team: 'Velocity Racing', impressions: 8200, status: 'active' }, { id: 'd2', name: 'Sarah Storm', team: 'Storm Motorsport', impressions: 6100, status: 'active' }, ], races: [ { id: 'r1', name: 'Spa 24 Hours', league: 'Endurance Pro', impressions: 15600, date: '2025-12-20', status: 'upcoming' }, ], platform: [ { id: 'p1', name: 'Homepage Banner', placement: 'Header', impressions: 52000, status: 'active' }, ], }, recentActivity: [ { id: 'a1', type: 'race', message: 'GT3 Masters Championship race completed', time: '2 hours ago', impressions: 1240 }, { id: 'a2', type: 'driver', message: 'Max Velocity finished P1 at Monza', time: '5 hours ago', impressions: 890 }, { id: 'a3', type: 'league', message: 'New driver joined Endurance Pro Series', time: '1 day ago', impressions: null }, { id: 'a4', type: 'team', message: 'Velocity Racing won team championship', time: '2 days ago', impressions: 2100 }, ], upcomingRenewals: [ { id: 'ren1', name: 'GT3 Masters Championship', type: 'league', renewDate: '2026-01-15', price: 1200 }, { id: 'ren2', name: 'Homepage Banner', type: 'platform', renewDate: '2025-12-31', price: 500 }, ], }; // Metric Card Component function MetricCard({ title, value, change, icon: Icon, suffix = '', prefix = '', delay = 0, }: { title: string; value: number | string; change?: number; icon: typeof Eye; suffix?: string; prefix?: string; delay?: number; }) { const shouldReduceMotion = useReducedMotion(); const isPositive = change && change > 0; const isNegative = change && change < 0; return (
{change !== undefined && (
{isPositive ? : isNegative ? : null} {Math.abs(change)}%
)}
{prefix}{typeof value === 'number' ? value.toLocaleString() : value}{suffix}
{title}
); } // Sponsorship Category Card function SponsorshipCategoryCard({ icon: Icon, title, count, impressions, color, href }: { icon: typeof Trophy; title: string; count: number; impressions: number; color: string; href: string; }) { return (

{title}

{count} active

{impressions.toLocaleString()}

impressions

); } // Activity Item function ActivityItem({ activity }: { activity: typeof MOCK_SPONSOR_DATA.recentActivity[0] }) { const typeColors = { race: 'bg-warning-amber', league: 'bg-primary-blue', team: 'bg-purple-400', driver: 'bg-performance-green', platform: 'bg-racing-red', }; return (

{activity.message}

{activity.time} {activity.impressions && ( <> {activity.impressions.toLocaleString()} views )}
); } // Renewal Alert function RenewalAlert({ renewal }: { renewal: typeof MOCK_SPONSOR_DATA.upcomingRenewals[0] }) { const typeIcons = { league: Trophy, team: Users, driver: Car, race: Flag, platform: Megaphone, }; const Icon = typeIcons[renewal.type as keyof typeof typeIcons] || Trophy; return (

{renewal.name}

Renews {renewal.renewDate}

${renewal.price}

); } export default function SponsorDashboardPage() { const shouldReduceMotion = useReducedMotion(); const [timeRange, setTimeRange] = useState<'7d' | '30d' | '90d' | 'all'>('30d'); const [loading, setLoading] = useState(true); // Simulate loading useEffect(() => { const timer = setTimeout(() => setLoading(false), 500); return () => clearTimeout(timer); }, []); const data = MOCK_SPONSOR_DATA; // Calculate category totals const categoryData = { leagues: { count: data.sponsorships.leagues.length, impressions: data.sponsorships.leagues.reduce((sum, l) => sum + l.impressions, 0), }, teams: { count: data.sponsorships.teams.length, impressions: data.sponsorships.teams.reduce((sum, t) => sum + t.impressions, 0), }, drivers: { count: data.sponsorships.drivers.length, impressions: data.sponsorships.drivers.reduce((sum, d) => sum + d.impressions, 0), }, races: { count: data.sponsorships.races.length, impressions: data.sponsorships.races.reduce((sum, r) => sum + r.impressions, 0), }, platform: { count: data.sponsorships.platform.length, impressions: data.sponsorships.platform.reduce((sum, p) => sum + p.impressions, 0), }, }; if (loading) { return (

Loading dashboard...

); } return (
{/* Header */}

Sponsor Dashboard

Welcome back, {data.sponsorName}

{/* Time Range Selector */}
{(['7d', '30d', '90d', 'all'] as const).map((range) => ( ))}
{/* Quick Actions */}
{/* Key Metrics */}
{/* Sponsorship Categories */}

Your Sponsorships

{/* Main Content Grid */}
{/* Left Column - Sponsored Entities */}
{/* Top Performing Sponsorships */}

Top Performing

{/* Leagues */} {data.sponsorships.leagues.map((league) => (
{league.tier === 'main' ? 'Main' : 'Secondary'}
{league.name}
{league.drivers} drivers
{league.impressions.toLocaleString()}
impressions
))} {/* Teams */} {data.sponsorships.teams.map((team) => (
Team
{team.name}
{team.drivers} drivers
{team.impressions.toLocaleString()}
impressions
))} {/* Drivers */} {data.sponsorships.drivers.slice(0, 2).map((driver) => (
Driver
{driver.name}
{driver.team}
{driver.impressions.toLocaleString()}
impressions
))}
{/* Upcoming Events */}

Upcoming Sponsored Events

{data.sponsorships.races.length > 0 ? (
{data.sponsorships.races.map((race) => (

{race.name}

{race.league} • {race.date}

{race.status}
))}
) : (

No upcoming sponsored events

)}
{/* Right Column - Activity & Quick Actions */}
{/* Quick Actions */}

Quick Actions

{/* Renewal Alerts */} {data.upcomingRenewals.length > 0 && (

Upcoming Renewals

{data.upcomingRenewals.map((renewal) => ( ))}
)} {/* Recent Activity */}

Recent Activity

{data.recentActivity.map((activity) => ( ))}
{/* Investment Summary */}

Investment Summary

Active Sponsorships {data.metrics.activeSponsors}
Total Investment ${data.metrics.totalInvestment.toLocaleString()}
Cost per 1K Views ${(data.metrics.totalInvestment / data.metrics.totalImpressions * 1000).toFixed(2)}
Next Invoice Jan 1, 2026
); }