import { useEffect, useState } from 'react' import { useParams } from 'react-router-dom' import { Check, Clock, X, ChefHat, Truck, Package, Leaf } from 'lucide-react' import { fetchOrderStatus } from '../api' const STATUS_CONFIG = { pending_acceptance: { label: 'Waiting for confirmation', Icon: Clock, color: '#c9a24b', bg: '#f6edd6' }, accepted: { label: 'Order accepted!', Icon: Check, color: '#3f7d4e', bg: '#e7f1e7' }, rejected: { label: 'Order declined', Icon: X, color: '#c2602f', bg: '#f7e6dc' }, preparing: { label: 'Being prepared', Icon: ChefHat, color: '#2d3b2d', bg: '#e7ede7' }, ready: { label: 'Ready for pickup!', Icon: Package, color: '#3f7d4e', bg: '#e7f1e7' }, out_for_delivery: { label: 'Out for delivery', Icon: Truck, color: '#2d3b2d', bg: '#e7ede7' }, delivered: { label: 'Delivered!', Icon: Check, color: '#3f7d4e', bg: '#e7f1e7' }, } const TERMINAL = new Set(['rejected', 'delivered']) const POLL_MS = 10_000 export default function OrderConfirm() { const { ref } = useParams() const [orderStatus, setOrderStatus] = useState(null) const [rejectionReason, setRejectionReason] = useState(null) const [error, setError] = useState(false) useEffect(() => { let timer async function poll() { try { const data = await fetchOrderStatus(ref) setOrderStatus(data.status) setRejectionReason(data.rejection_reason) if (!TERMINAL.has(data.status)) { timer = setTimeout(poll, POLL_MS) } } catch { setError(true) } } poll() return () => clearTimeout(timer) }, [ref]) const cfg = STATUS_CONFIG[orderStatus] ?? STATUS_CONFIG.pending_acceptance const { label, Icon, color, bg } = cfg return (
{/* Ornament top */}
{/* Status icon */}
{/* Ref number */}

{ref}

{/* Status label */}

{error ? 'Could not load status' : label}

{/* Rejection reason */} {rejectionReason && (

Reason: {rejectionReason}

)} {/* Subtext */} {orderStatus === 'delivered' && (

Thank you for your order! Enjoy your meal.

)} {orderStatus === 'rejected' && (

We're sorry we couldn't take your order this time. Please try again or speak to staff.

)} {!TERMINAL.has(orderStatus) && !error && (

We'll update this page automatically. Keep it open.

)} {/* Spinner */} {!TERMINAL.has(orderStatus) && !error && (
)} {/* Ornament bottom */}
) }