'use client'; import { useState, useEffect, useCallback } from 'react'; import { useRouter } from 'next/navigation'; import { Button } from '@/components/ui/Button'; import { getVehicle, deleteVehicle, type VehicleResponse, } from '@/lib/vehicles'; import { MobileDeStatus } from './MobileDeStatus'; interface VehicleDetailProps { vehicleId: string; } function formatPrice(price: number): string { return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price); } function formatDate(dateStr?: string): string { if (!dateStr) return '—'; return new Date(dateStr).toLocaleDateString('de-DE'); } export function VehicleDetail({ vehicleId }: VehicleDetailProps) { const router = useRouter(); const [vehicle, setVehicle] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const fetchVehicle = useCallback(async () => { setLoading(true); setError(null); try { const data = await getVehicle(vehicleId); setVehicle(data); } catch (err: unknown) { const apiErr = err as { error?: { message?: string } }; setError(apiErr?.error?.message || 'Failed to load vehicle'); } finally { setLoading(false); } }, [vehicleId]); useEffect(() => { fetchVehicle(); }, [fetchVehicle]); const handleDelete = async () => { if (!vehicle) return; if (!confirm('Delete this vehicle?')) return; try { await deleteVehicle(vehicle.id); router.push('/de/fahrzeuge'); } catch (err: unknown) { const apiErr = err as { error?: { message?: string } }; setError(apiErr?.error?.message || 'Failed to delete vehicle'); } }; if (loading) { return (
Loading vehicle...
); } if (error) { return (
{error}
); } if (!vehicle) { return (
Vehicle not found
); } const fields: { label: string; value: string | number | undefined | null }[] = [ { label: 'Make', value: vehicle.make }, { label: 'Model', value: vehicle.model }, { label: 'FIN', value: vehicle.fin }, { label: 'Year', value: vehicle.year }, { label: 'First Registration', value: formatDate(vehicle.first_registration) }, { label: 'Power (kW)', value: vehicle.power_kw }, { label: 'Power (HP)', value: vehicle.power_hp }, { label: 'Fuel Type', value: vehicle.fuel_type }, { label: 'Transmission', value: vehicle.transmission }, { label: 'Color', value: vehicle.color }, { label: 'Condition', value: vehicle.condition }, { label: 'Location', value: vehicle.location }, { label: 'Availability', value: vehicle.availability }, { label: 'Price', value: formatPrice(vehicle.price) }, { label: 'Vehicle Type', value: vehicle.vehicle_type }, { label: 'LKW Type', value: vehicle.lkw_type }, { label: 'Machine Type', value: vehicle.machine_type }, { label: 'Body Type', value: vehicle.body_type }, { label: 'Operating Hours', value: vehicle.operating_hours }, { label: 'Operating Hours Unit', value: vehicle.operating_hours_unit }, { label: 'Mileage (km)', value: vehicle.mileage_km }, { label: 'Description', value: vehicle.description }, { label: 'Created At', value: formatDate(vehicle.created_at) }, { label: 'Updated At', value: formatDate(vehicle.updated_at) }, ]; return (

{vehicle.make} {vehicle.model}

{fields.map(field => (
{field.label}
{field.value !== null && field.value !== undefined && field.value !== '' ? field.value : '—'}
))}
); }