

import { ReactNode } from 'react';
import { Stack } from '@/ui/Stack';
import { Heading } from '@/ui/Heading';
import { Icon } from '@/ui/Icon';
import { Text } from '@/ui/Text';
import { Image } from '@/ui/Image';
import { PlaceholderImage } from '@/ui/PlaceholderImage';
import { Calendar as LucideCalendar, ChevronRight as LucideChevronRight } from 'lucide-react';

interface LeagueCardProps {
  name: string;
  description?: string;
  coverUrl: string;
  logoUrl?: string;
  badges?: ReactNode;
  championshipBadge?: ReactNode;
  slotLabel: string;
  usedSlots: number;
  maxSlots: number | string;
  fillPercentage: number;
  hasOpenSlots: boolean;
  openSlotsCount: number;
  isTeamLeague?: boolean;
  usedDriverSlots?: number;
  maxDrivers?: number | string;
  timingSummary?: string;
  onClick?: () => void;
}

export function LeagueCard({
  name,
  description,
  coverUrl,
  logoUrl,
  badges,
  championshipBadge,
  slotLabel,
  usedSlots,
  maxSlots,
  fillPercentage,
  hasOpenSlots,
  openSlotsCount,
  isTeamLeague: _isTeamLeague,
  usedDriverSlots: _usedDriverSlots,
  maxDrivers: _maxDrivers,
  timingSummary,
  onClick,
}: LeagueCardProps) {
  return (
    <Stack
      position="relative"
      cursor={onClick ? 'pointer' : 'default'}
      h="full"
      onClick={onClick}
      className="group"
    >
      {/* Card Container */}
      <Stack 
        position="relative" 
        h="full" 
        rounded="none" 
        bg="panel-gray/40" 
        border 
        borderColor="border-gray/50" 
        overflow="hidden" 
        transition 
        className="hover:border-primary-accent/30 hover:bg-panel-gray/60 transition-all duration-300"
      >
        {/* Cover Image */}
        <Stack position="relative" h="32" overflow="hidden">
          <Image
            src={coverUrl}
            alt={`${name} cover`}
            fullWidth
            fullHeight
            objectFit="cover"
            className="transition-transform duration-500 group-hover:scale-105 opacity-60"
          />
          {/* Gradient Overlay */}
          <Stack position="absolute" inset="0" bg="linear-gradient(to top, #0C0D0F, transparent)" />
          
          {/* Badges - Top Left */}
          <Stack position="absolute" top="3" left="3" display="flex" alignItems="center" gap={2}>
            {badges}
          </Stack>

          {/* Championship Type Badge - Top Right */}
          <Stack position="absolute" top="3" right="3">
            {championshipBadge}
          </Stack>

          {/* Logo */}
          <Stack position="absolute" left="4" bottom="-6" zIndex={10}>
            <Stack w="12" h="12" rounded="none" overflow="hidden" border borderColor="border-gray/50" bg="graphite-black" shadow="xl">
              {logoUrl ? (
                <Image
                  src={logoUrl}
                  alt={`${name} logo`}
                  width={48}
                  height={48}
                  fullWidth
                  fullHeight
                  objectFit="cover"
                />
              ) : (
                <PlaceholderImage size={48} />
              )}
            </Stack>
          </Stack>
        </Stack>

        {/* Content */}
        <Stack pt={8} px={4} pb={4} display="flex" flexDirection="col" fullHeight>
          {/* Title & Description */}
          <Stack direction="row" align="center" gap={2} mb={1}>
            <Stack w="1" h="4" bg="primary-accent" />
            <Heading level={3} fontSize="lg" weight="bold" className="line-clamp-1 group-hover:text-primary-accent transition-colors tracking-tight">
              {name}
            </Heading>
          </Stack>
          <Text size="xs" color="text-gray-500" lineClamp={2} mb={4} style={{ height: '2.5rem' }} block leading="relaxed">
            {description || 'No description available'}
          </Text>

          {/* Stats Row */}
          <Stack display="flex" alignItems="center" gap={3} mb={4}>
            {/* Primary Slots (Drivers/Teams/Nations) */}
            <Stack flexGrow={1}>
              <Stack display="flex" alignItems="center" justifyContent="between" mb={1.5}>
                <Text size="xs" color="text-gray-500" weight="bold" className="uppercase tracking-widest">{slotLabel}</Text>
                <Text size="xs" color="text-gray-400" font="mono">
                  {usedSlots}/{maxSlots || '∞'}
                </Text>
              </Stack>
              <Stack h="1" rounded="none" bg="border-gray/30" overflow="hidden">
                <Stack
                  h="full"
                  rounded="none"
                  transition
                  bg={
                    fillPercentage >= 90
                      ? 'warning-amber'
                      : fillPercentage >= 70
                      ? 'primary-accent'
                      : 'success-green'
                  }
                  style={{ width: `${Math.min(fillPercentage, 100)}%` }}
                />
              </Stack>
            </Stack>

            {/* Open Slots Badge */}
            {hasOpenSlots && (
              <Stack display="flex" alignItems="center" gap={1.5} px={2} py={1} rounded="none" bg="primary-accent/5" border borderColor="primary-accent/20">
                <Stack w="1.5" h="1.5" rounded="full" bg="primary-accent" className="animate-pulse" />
                <Text size="xs" color="text-primary-accent" weight="bold" className="uppercase tracking-tighter">
                  {openSlotsCount} OPEN
                </Text>
              </Stack>
            )}
          </Stack>

          {/* Spacer to push footer to bottom */}
          <Stack flexGrow={1} />

          {/* Footer Info */}
          <Stack display="flex" alignItems="center" justifyContent="between" pt={3} borderTop borderColor="border-gray/30" mt="auto">
            <Stack display="flex" alignItems="center" gap={3}>
              {timingSummary && (
                <Stack display="flex" alignItems="center" gap={2}>
                  <Icon icon={LucideCalendar} size={3} color="text-gray-500" />
                  <Text size="xs" color="text-gray-500" font="mono">
                    {timingSummary.split('•')[1]?.trim() || timingSummary}
                  </Text>
                </Stack>
              )}
            </Stack>
            
            {/* View Arrow */}
            <Stack display="flex" alignItems="center" gap={1} className="group-hover:text-primary-accent transition-colors">
              <Text size="xs" color="text-gray-500" weight="bold" className="uppercase tracking-widest">VIEW</Text>
              <Icon icon={LucideChevronRight} size={3} color="text-gray-500" className="transition-transform group-hover:translate-x-0.5" />
            </Stack>
          </Stack>
        </Stack>
      </Stack>
    </Stack>
  );
}

