import type { EncounterDetail } from '../types'
import { TypeBadge } from './TypeBadge'

interface PokemonCardProps {
  encounter: EncounterDetail
  showFaintLevel?: boolean
  onClick?: () => void
}

export function PokemonCard({ encounter, showFaintLevel, onClick }: PokemonCardProps) {
  const { pokemon, currentPokemon, route, nickname, catchLevel, faintLevel, deathCause } = encounter
  const isDead = faintLevel !== null
  const displayPokemon = currentPokemon ?? pokemon
  const isEvolved = currentPokemon !== null

  return (
    <div
      onClick={onClick}
      className={`bg-white dark:bg-gray-800 rounded-lg shadow p-4 flex flex-col items-center text-center ${
        isDead ? 'opacity-60 grayscale' : ''
      } ${onClick ? 'cursor-pointer hover:ring-2 hover:ring-blue-400 transition-shadow' : ''}`}
    >
      {displayPokemon.spriteUrl ? (
        <img
          src={displayPokemon.spriteUrl}
          alt={displayPokemon.name}
          className="w-25 h-25"
        />
      ) : (
        <div className="w-25 h-25 rounded-full bg-gray-300 dark:bg-gray-600 flex items-center justify-center text-xl font-bold text-gray-600 dark:text-gray-300">
          {displayPokemon.name[0].toUpperCase()}
        </div>
      )}

      <div className="mt-2 flex items-center gap-1.5">
        <span
          className={`w-2 h-2 rounded-full shrink-0 ${isDead ? 'bg-red-500' : 'bg-green-500'}`}
        />
        <span className="font-semibold text-gray-900 dark:text-gray-100 text-sm">
          {nickname || displayPokemon.name}
        </span>
      </div>
      {nickname && (
        <div className="text-xs text-gray-500 dark:text-gray-400">
          {displayPokemon.name}
        </div>
      )}

      <div className="flex flex-col items-center gap-0.5 mt-1">
        {displayPokemon.types.map((type) => (
          <TypeBadge key={type} type={type} />
        ))}
      </div>

      <div className="text-xs text-gray-500 dark:text-gray-400 mt-1">
        {showFaintLevel && isDead
          ? `Lv. ${catchLevel} → ${faintLevel}`
          : `Lv. ${catchLevel ?? '?'}`}
      </div>

      <div className="text-xs text-gray-400 dark:text-gray-500 mt-0.5">
        {route.name}
      </div>

      {isEvolved && (
        <div className="text-[10px] text-gray-400 dark:text-gray-500 mt-0.5">
          Originally: {pokemon.name}
        </div>
      )}

      {isDead && deathCause && (
        <div className="text-[10px] italic text-gray-400 dark:text-gray-500 mt-0.5 line-clamp-2">
          {deathCause}
        </div>
      )}
    </div>
  )
}
