'use client' import { WearPart } from '@prisma/client' import { MaintenanceHistory } from '@prisma/client' import { calculateServiceStatus } from '@/lib/utils' import { formatDate, formatCurrency } from '@/lib/utils' import AlertBadge from './AlertBadge' import MaintenanceTimeline from './MaintenanceTimeline' import { useState } from 'react' interface WearPartListProps { bikeId: string parts: (WearPart & { maintenanceHistory: MaintenanceHistory[] })[] onUpdate: () => void } export default function WearPartList({ bikeId, parts, onUpdate, }: WearPartListProps) { const [expandedPart, setExpandedPart] = useState(null) const handleDelete = async (partId: string) => { if (!confirm('Möchten Sie dieses Verschleißteil wirklich löschen?')) { return } try { const response = await fetch(`/api/parts/${partId}`, { method: 'DELETE', }) if (response.ok) { onUpdate() } else { alert('Fehler beim Löschen des Verschleißteils') } } catch (error) { console.error('Error deleting part:', error) alert('Fehler beim Löschen des Verschleißteils') } } if (parts.length === 0) { return (

Noch keine Verschleißteile erfasst.

Klicken Sie auf "Neues Verschleißteil" um zu beginnen.

) } return (
{parts.map((part) => { const serviceStatus = calculateServiceStatus(part) const isExpanded = expandedPart === part.id return (

{part.type}

{serviceStatus.status !== 'OK' && ( )} {part.status}
{part.brand && part.model && (

{part.brand} {part.model}

)}
Installiert:

{formatDate(part.installDate)}

Installations-KM:

{part.installMileage} km

Service-Intervall:

{part.serviceInterval} km

{part.cost && (
Kosten:

{formatCurrency(part.cost)}

)}
Status: {serviceStatus.status === 'OK' ? 'OK' : serviceStatus.status === 'WARNING' ? 'Warnung' : 'Kritisch'}

{serviceStatus.remainingKm.toFixed(0)} km bis zur Wartung

{part.notes && (
Notizen:

{part.notes}

)}
{isExpanded && (
)}
) })}
) }