import {
MoveRight, MoveUpRight, MoveDownRight, CornerUpRight, CornerUpLeft,
MoveLeft, MoveUpLeft, MoveDownLeft, CircleDot, RotateCw,
GitMerge, CornerRightDown, CornerRightUp, Navigation, Mountain, Map, AlertTriangle
} from 'lucide-react'
import { useStore } from '../store'
function formatDistKm(km) {
const miles = km * 0.621371
if (miles < 0.1) return Math.round(miles * 5280) + ' ft'
return miles.toFixed(1) + ' mi'
}
function formatTimeMin(minutes) {
if (minutes < 60) return Math.round(minutes) + ' min'
const h = Math.floor(minutes / 60)
const m = Math.round(minutes % 60)
return m > 0 ? h + 'h ' + m + 'm' : h + 'h'
}
function ManeuverIcon({ type }) {
const size = 16
const props = { size, strokeWidth: 1.5 }
switch (type) {
case 0: return
case 1: return
case 2: return
case 3: return
case 4: case 5: return
case 6: return
case 7: return
case 8: return
case 9: return
case 10: case 11: case 12: return
case 15: case 16: return
case 24: return
case 25: return
case 26: return
default: return
}
}
export default function ManeuverList() {
const routeResult = useStore((s) => s.routeResult)
const routeLoading = useStore((s) => s.routeLoading)
const routeError = useStore((s) => s.routeError)
if (routeLoading) {
return (
)
}
if (routeError) {
return (
{routeError}
)
}
if (!routeResult?.summary) return null
const summary = routeResult.summary
const networkFeature = routeResult.route?.features?.find(f => f.properties?.segment_type === 'network')
const maneuvers = networkFeature?.properties?.maneuvers || []
return (
{/* Total summary */}
{formatDistKm(summary.total_distance_km)}
{formatTimeMin(summary.total_effort_minutes)}
{/* Segment breakdown */}
{summary.wilderness_distance_km > 0 && (
Wilderness
{formatDistKm(summary.wilderness_distance_km)} / {formatTimeMin(summary.wilderness_effort_minutes)}
)}
{summary.network_distance_km > 0 && (
Road/Trail
{formatDistKm(summary.network_distance_km)} / {formatTimeMin(summary.network_duration_minutes)}
)}
{/* Warnings */}
{(summary.barrier_crossings > 0 || summary.mvum_closed_crossings > 0) && (
{summary.barrier_crossings > 0 && (
{summary.barrier_crossings} barrier crossing{summary.barrier_crossings > 1 ? 's' : ''}
)}
{summary.mvum_closed_crossings > 0 && (
{summary.mvum_closed_crossings} MVUM closure{summary.mvum_closed_crossings > 1 ? 's' : ''}
)}
)}
{/* Turn-by-turn directions */}
{maneuvers.length > 0 && (
Directions
{maneuvers.map((man, i) => (
{man.instruction}
{formatDistKm(man.distance_km)}
))}
)}
)
}