'use client'; export const dynamic = 'force-dynamic'; import { useQuery } from '@tanstack/react-query'; 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 MetricCard from '@/components/sponsors/MetricCard'; import SponsorshipCategoryCard from '@/components/sponsors/SponsorshipCategoryCard'; import ActivityItem from '@/components/sponsors/ActivityItem'; import RenewalAlert from '@/components/sponsors/RenewalAlert'; 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'; import { useInject } from '@/lib/di/hooks/useInject'; import { SPONSOR_SERVICE_TOKEN, POLICY_SERVICE_TOKEN } from '@/lib/di/tokens'; import { enhanceQueryResult } from '@/lib/di/hooks/useReactQueryWithApiError'; export default function SponsorDashboardPage() { const shouldReduceMotion = useReducedMotion(); const sponsorService = useInject(SPONSOR_SERVICE_TOKEN); const policyService = useInject(POLICY_SERVICE_TOKEN); const policyQuery = useQuery({ queryKey: ['policySnapshot'], queryFn: () => policyService.getSnapshot(), staleTime: 60_000, gcTime: 5 * 60_000, }); const enhancedPolicyQuery = enhanceQueryResult(policyQuery); const policySnapshot = enhancedPolicyQuery.data; const policyLoading = enhancedPolicyQuery.isLoading; const policyError = enhancedPolicyQuery.error; const sponsorPortalState = policySnapshot ? policyService.getCapabilityState(policySnapshot, 'sponsors.portal') : null; const dashboardQuery = useQuery({ queryKey: ['sponsorDashboard', 'demo-sponsor-1', sponsorPortalState], queryFn: () => sponsorService.getSponsorDashboard('demo-sponsor-1'), enabled: !!policySnapshot && sponsorPortalState === 'enabled', staleTime: 300_000, gcTime: 10 * 60_000, }); const enhancedDashboardQuery = enhanceQueryResult(dashboardQuery); const dashboardData = enhancedDashboardQuery.data; const dashboardLoading = enhancedDashboardQuery.isLoading; const dashboardError = enhancedDashboardQuery.error; const loading = policyLoading || dashboardLoading; const error = policyError || dashboardError || (sponsorPortalState !== 'enabled' && sponsorPortalState !== null); if (loading) { return (

Loading dashboard...

); } if (error || !dashboardData) { const errorMessage = sponsorPortalState === 'coming_soon' ? 'Sponsor portal is coming soon.' : sponsorPortalState === 'disabled' ? 'Sponsor portal is currently unavailable.' : 'Failed to load dashboard data'; return (

{errorMessage}

); } const categoryData = dashboardData.categoryData; return (
{/* Header */}

Sponsor Dashboard

Welcome back, {dashboardData.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 */} {dashboardData.sponsorships.leagues.map((league: any) => (
{league.tier === 'main' ? 'Main' : 'Secondary'}
{league.entityName}
{league.details}
{league.formattedImpressions}
impressions
))} {/* Teams */} {dashboardData.sponsorships.teams.map((team: any) => (
Team
{team.entityName}
{team.details}
{team.formattedImpressions}
impressions
))} {/* Drivers */} {dashboardData.sponsorships.drivers.slice(0, 2).map((driver: any) => (
Driver
{driver.entityName}
{driver.details}
{driver.formattedImpressions}
impressions
))}
{/* Upcoming Events */}

Upcoming Sponsored Events

{dashboardData.sponsorships.races.length > 0 ? (
{dashboardData.sponsorships.races.map((race: any) => (

{race.entityName}

{race.details}

{race.status}
))}
) : (

No upcoming sponsored events

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

Quick Actions

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

Upcoming Renewals

{dashboardData.upcomingRenewals.map((renewal: any) => ( ))}
)} {/* Recent Activity */}

Recent Activity

{dashboardData.recentActivity.map((activity: any) => ( ))}
{/* Investment Summary */}

Investment Summary

Active Sponsorships {dashboardData.activeSponsorships}
Total Investment {dashboardData.formattedTotalInvestment}
Cost per 1K Views {dashboardData.costPerThousandViews}
Next Invoice Jan 1, 2026
); }