import { useState } from 'react' import type { EncounterDetail } from '../types' interface StatusChangeModalProps { encounter: EncounterDetail onUpdate: (data: { id: number data: { faintLevel?: number; deathCause?: string } }) => void onClose: () => void isPending: boolean } const typeColors: Record = { normal: 'bg-gray-400', fire: 'bg-red-500', water: 'bg-blue-500', electric: 'bg-yellow-400', grass: 'bg-green-500', ice: 'bg-cyan-300', fighting: 'bg-red-700', poison: 'bg-purple-500', ground: 'bg-amber-600', flying: 'bg-indigo-300', psychic: 'bg-pink-500', bug: 'bg-lime-500', rock: 'bg-amber-700', ghost: 'bg-purple-700', dragon: 'bg-indigo-600', dark: 'bg-gray-700', steel: 'bg-gray-400', fairy: 'bg-pink-300', } export function StatusChangeModal({ encounter, onUpdate, onClose, isPending, }: StatusChangeModalProps) { const { pokemon, route, nickname, catchLevel, faintLevel, deathCause } = encounter const isDead = faintLevel !== null const [showConfirm, setShowConfirm] = useState(false) const [deathLevel, setDeathLevel] = useState('') const [cause, setCause] = useState('') const handleConfirmDeath = () => { onUpdate({ id: encounter.id, data: { faintLevel: deathLevel ? Number(deathLevel) : undefined, deathCause: cause || undefined, }, }) } return (
{/* Header */}

{isDead ? 'Death Details' : 'Pokemon Status'}

{/* Pokemon info */}
{pokemon.spriteUrl ? ( {pokemon.name} ) : (
{pokemon.name[0].toUpperCase()}
)}
{nickname || pokemon.name}
{nickname && (
{pokemon.name}
)}
{pokemon.types.map((type) => ( {type} ))}
Lv. {catchLevel ?? '?'} · {route.name}
{/* Dead pokemon: view-only details */} {isDead && (
Deceased
{faintLevel !== null && (
Level at death: {' '} {faintLevel}
)} {deathCause && (
Cause: {' '} {deathCause}
)}
)} {/* Alive pokemon: mark as dead */} {!isDead && !showConfirm && ( )} {/* Confirmation form */} {!isDead && showConfirm && (

This cannot be undone (Nuzlocke rules).

setDeathLevel(e.target.value)} placeholder="Level" className="w-24 px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-red-500" />
setCause(e.target.value)} placeholder="e.g. Crit from rival's Charizard" className="w-full px-3 py-2 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:outline-none focus:ring-2 focus:ring-red-500" />
)}
{/* Footer for dead/no-confirm views */} {(isDead || (!isDead && !showConfirm)) && (
)}
) }