'use client' import { BikeWithParts } from '@/types' import { useState } from 'react' import Link from 'next/link' import { calculateServiceStatus } from '@/lib/utils' import AlertBadge from './AlertBadge' interface BikeCardProps { bike: BikeWithParts onDelete: () => void } export default function BikeCard({ bike, onDelete }: BikeCardProps) { const [isDeleting, setIsDeleting] = useState(false) const handleDelete = async () => { if (!confirm('Möchten Sie dieses Fahrrad wirklich löschen?')) { return } setIsDeleting(true) try { const response = await fetch(`/api/bikes/${bike.id}`, { method: 'DELETE', }) if (response.ok) { onDelete() } else { alert('Fehler beim Löschen des Fahrrads') } } catch (error) { console.error('Error deleting bike:', error) alert('Fehler beim Löschen des Fahrrads') } finally { setIsDeleting(false) } } const activeParts = bike.wearParts.filter((p) => p.status === 'ACTIVE') const needsServiceParts = activeParts.filter((part) => { const serviceStatus = calculateServiceStatus(part, bike.currentMileage) return serviceStatus.status !== 'OK' || serviceStatus.isOverdue }) const overdueParts = activeParts.filter((part) => { const serviceStatus = calculateServiceStatus(part, bike.currentMileage) return serviceStatus.isOverdue }) return (
{bike.brand} {bike.model}
)}{activeParts.length} aktive Verschleißteile
{bike.currentMileage.toLocaleString('de-DE')} km
{overdueParts.length > 0 && ({overdueParts.length} überfällig!
)} {needsServiceParts.length > 0 && overdueParts.length === 0 && ({needsServiceParts.length} benötigen Wartung
)}