import type { Part } from '@arac-hasar/types'; import { PART_STATUS_TR } from '@arac-hasar/types'; import { DamageBadge } from './DamageBadge'; import { cn } from '../utils/cn'; interface Props { part: Part; className?: string; onDamageClick?: (damageId: number) => void; onPartClick?: () => void; } const STATUS_RING: Record = { clean: 'ring-emerald-200 bg-emerald-50/40', minor_damage: 'ring-amber-300 bg-amber-50/30', moderate_damage: 'ring-orange-300 bg-orange-50/30', severe_damage: 'ring-red-300 bg-red-50/30', }; const STATUS_DOT: Record = { clean: 'bg-emerald-500', minor_damage: 'bg-amber-500', moderate_damage: 'bg-orange-500', severe_damage: 'bg-red-500', }; export function PartCard({ part, className, onDamageClick, onPartClick }: Props) { const isClean = part.status === 'clean'; const interactive = !!onPartClick; return (
{ if (!interactive) return; if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onPartClick?.(); } }} aria-label={interactive ? `${part.name_tr}, ${PART_STATUS_TR[part.status]}` : undefined} className={cn( 'rounded-xl ring-1 ring-inset p-4 transition-shadow', STATUS_RING[part.status], interactive && 'cursor-pointer hover:shadow-md focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-1', className, )} >

{part.name_tr}

{isClean ? 'Hasarsız' : `${part.damage_count} hasar`}
{PART_STATUS_TR[part.status]}
{!isClean && ( <>
{part.damages.map((d) => ( onDamageClick(d.id) : undefined} /> ))}
{part.part_cost_max_tl > 0 && (
Parça toplam {part.part_cost_min_tl.toLocaleString('tr-TR')} –{' '} {part.part_cost_max_tl.toLocaleString('tr-TR')} ₺
)} {part.cost_note && (

{part.cost_note}

)} )}
); }