'use client'; import { Button } from '@/ui/Button'; import { Card } from '@/ui/Card'; import { Heading } from '@/ui/Heading'; import { Icon } from '@/ui/Icon'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { BarChart3, Calendar, Car, ChevronRight, ExternalLink, Flag, Megaphone, Trophy, Users } from 'lucide-react'; import { SponsorStatus, SponsorStatusChip } from './SponsorStatusChip'; export type SponsorshipType = 'league' | 'team' | 'driver' | 'race' | 'platform'; interface SponsorContractCardProps { id: string; type: SponsorshipType; status: string; // Accept raw status string title: string; subtitle?: string; tier: string; investment: string; impressions: string; startDate?: string; endDate?: string; onViewDetails?: (id: string) => void; } const TYPE_CONFIG = { league: { icon: Trophy, color: 'text-primary-blue', bgColor: 'bg-primary-blue/10', label: 'League' }, team: { icon: Users, color: 'text-purple-400', bgColor: 'bg-purple-400/10', label: 'Team' }, driver: { icon: Car, color: 'text-performance-green', bgColor: 'bg-performance-green/10', label: 'Driver' }, race: { icon: Flag, color: 'text-warning-amber', bgColor: 'bg-warning-amber/10', label: 'Race' }, platform: { icon: Megaphone, color: 'text-racing-red', bgColor: 'bg-racing-red/10', label: 'Platform' }, }; function mapStatus(status: string): SponsorStatus { if (status === 'pending_approval' || status === 'pending') return 'pending'; if (status === 'rejected' || status === 'declined') return 'declined'; if (status === 'expired') return 'expired'; if (status === 'approved') return 'approved'; if (status === 'active') return 'active'; return 'pending'; } /** * SponsorContractCard * * Semantic component for displaying a sponsorship contract/campaign. * Provides a high-density overview of the sponsorship status and performance. */ export function SponsorContractCard({ id, type, status, title, subtitle, tier, investment, impressions, startDate, endDate, onViewDetails }: SponsorContractCardProps) { const typeConfig = TYPE_CONFIG[type]; const mappedStatus = mapStatus(status); return ( {typeConfig.label} • {tier} {title} {subtitle && {subtitle}} Impressions {impressions} Investment {investment} Term {endDate || 'N/A'} {startDate ? `Started ${startDate}` : 'Contract pending'} ); }