import { TransportEvent, TransportEventType } from '../../lib/transport/types'; interface TransportTimelineProps { plantId: string; events: TransportEvent[]; } const EVENT_ICONS: Record = { seed_acquisition: '🌱', planting: '🌿', growing_transport: '🚚', harvest: '🥬', processing: '⚙️', distribution: '📦', consumer_delivery: '🏠', seed_saving: '💾', seed_sharing: '🤝', }; const EVENT_COLORS: Record = { seed_acquisition: 'bg-green-500', planting: 'bg-emerald-500', growing_transport: 'bg-blue-500', harvest: 'bg-yellow-500', processing: 'bg-orange-500', distribution: 'bg-purple-500', consumer_delivery: 'bg-pink-500', seed_saving: 'bg-teal-500', seed_sharing: 'bg-indigo-500', }; function formatEventType(type: TransportEventType): string { return type.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()); } function formatDate(dateString: string): string { return new Date(dateString).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', }); } function formatLocation(location: { city?: string; region?: string; address?: string }): string { if (location.city && location.region) { return `${location.city}, ${location.region}`; } return location.city || location.region || location.address || 'Unknown location'; } export default function TransportTimeline({ plantId, events }: TransportTimelineProps) { if (events.length === 0) { return (

Transport Timeline

No transport events recorded for this plant yet.

); } const sortedEvents = [...events].sort( (a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime() ); return (

Transport Timeline

Plant ID: {plantId.slice(0, 8)}...
{/* Vertical line */}
{sortedEvents.map((event, index) => (
{/* Event icon */}
{EVENT_ICONS[event.eventType]}
{/* Event content */}

{formatEventType(event.eventType)}

{event.status}

{formatDate(event.timestamp)}

From:

{formatLocation(event.fromLocation)}

To:

{formatLocation(event.toLocation)}

Distance

{event.distanceKm.toFixed(1)} km

Duration

{event.durationMinutes} min

Carbon

{event.carbonFootprintKg.toFixed(3)} kg

Transport: {event.transportMethod.replace(/_/g, ' ')}
{event.notes && (

"{event.notes}"

)}
))}
{/* Summary */}

{events.length}

Total Events

{events.reduce((sum, e) => sum + e.distanceKm, 0).toFixed(1)} km

Total Distance

{events.reduce((sum, e) => sum + e.carbonFootprintKg, 0).toFixed(2)} kg

Total Carbon

); }