'use client'; import { useAuth } from '@/lib/auth/AuthContext'; import { AnimatePresence, motion, useReducedMotion } from 'framer-motion'; import { BarChart3, Building2, ChevronDown, CreditCard, Handshake, LogOut, Megaphone, Paintbrush, Settings, TrendingUp, Trophy } from 'lucide-react'; import Link from 'next/link'; import { useEffect, useMemo, useState } from 'react'; import DriverSummaryPill from '@/components/profile/DriverSummaryPill'; import { useEffectiveDriverId } from '@/hooks/useEffectiveDriverId'; import type { DriverViewModel } from '@/lib/view-models/DriverViewModel'; import { DriverViewModel as DriverViewModelClass } from '@/lib/view-models/DriverViewModel'; import { useServices } from '@/lib/services/ServiceProvider'; // Hook to detect sponsor mode function useSponsorMode(): boolean { const [isSponsor, setIsSponsor] = useState(false); useEffect(() => { const cookie = document.cookie .split('; ') .find(row => row.startsWith('gridpilot_demo_mode=')); if (cookie) { const value = cookie.split('=')[1]; setIsSponsor(value === 'sponsor'); } }, []); return isSponsor; } // Sponsor Pill Component - matches the style of DriverSummaryPill function SponsorSummaryPill({ onClick, companyName = 'Acme Racing Co.', activeSponsors = 7, impressions = 127, }: { onClick: () => void; companyName?: string; activeSponsors?: number; impressions?: number; }) { const shouldReduceMotion = useReducedMotion(); return ( {/* Avatar/Logo */}
{/* Active indicator */}
{/* Info */}
{companyName.split(' ')[0]}
{activeSponsors} {impressions}k
{/* Chevron */} ); } export default function UserPill() { const { session } = useAuth(); const { driverService, mediaService } = useServices(); const [driver, setDriver] = useState(null); const [isMenuOpen, setIsMenuOpen] = useState(false); const isSponsorMode = useSponsorMode(); const shouldReduceMotion = useReducedMotion(); const primaryDriverId = useEffectiveDriverId(); useEffect(() => { let cancelled = false; async function loadDriver() { if (!primaryDriverId) { if (!cancelled) { setDriver(null); } return; } const dto = await driverService.findById(primaryDriverId); if (!cancelled) { setDriver(dto ? new DriverViewModelClass(dto) : null); } } void loadDriver(); return () => { cancelled = true; }; }, [primaryDriverId, driverService]); const data = useMemo(() => { if (!session?.user || !primaryDriverId || !driver) { return null; } // Driver rating + rank are not exposed by the current API contract for the lightweight // driver DTO used in the header. Keep it null until the API provides it. const rating: number | null = null; const rank: number | null = null; const avatarSrc = mediaService.getDriverAvatar(primaryDriverId); return { driver, avatarSrc, rating, rank, }; }, [session, driver, primaryDriverId, mediaService]); // Close menu when clicking outside useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (isMenuOpen) { const target = e.target as HTMLElement; if (!target.closest('[data-user-pill]')) { setIsMenuOpen(false); } } }; document.addEventListener('click', handleClickOutside); return () => document.removeEventListener('click', handleClickOutside); }, [isMenuOpen]); // Sponsor mode UI if (isSponsorMode) { return (
setIsMenuOpen((open) => !open)} /> {isMenuOpen && ( {/* Header */}

Acme Racing Co.

Sponsor Account

{/* Quick stats */}
7 active
127k views
{/* Menu Items */}
setIsMenuOpen(false)} > Dashboard setIsMenuOpen(false)} > My Sponsorships setIsMenuOpen(false)} > Billing setIsMenuOpen(false)} > Settings
{/* Footer */}
)}
); } if (!session) { return (
Sign In Get Started
); } if (!data) { return null; } return (
setIsMenuOpen((open) => !open)} /> {isMenuOpen && (
setIsMenuOpen(false)} > Profile setIsMenuOpen(false)} > Manage leagues setIsMenuOpen(false)} > Liveries setIsMenuOpen(false)} > Sponsorship Requests setIsMenuOpen(false)} > Settings
)}
); }