'use client'; import { motion, AnimatePresence } from 'framer-motion'; import { X, Copy, Check, ExternalLink } from 'lucide-react'; import { useState } from 'react'; import { OrderRecord } from '@/src/types'; interface OrderDetailsModalProps { order: OrderRecord | null; isOpen: boolean; onClose: () => void; } export function OrderDetailsModal({ order, isOpen, onClose }: OrderDetailsModalProps) { const [copiedField, setCopiedField] = useState(null); if (!order) return null; const copyToClipboard = async (text: string, fieldName: string) => { try { await navigator.clipboard.writeText(text); setCopiedField(fieldName); setTimeout(() => setCopiedField(null), 2000); } catch (err) { console.error('Failed to copy:', err); } }; const formatDate = (dateString: string | undefined) => { if (!dateString) return 'N/A'; return new Date(dateString).toLocaleString('en-US', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', }); }; const formatCurrency = (amount: string | undefined, currency: string = 'USD') => { if (!amount) return 'N/A'; const numAmount = parseFloat(amount) / 100; return new Intl.NumberFormat('en-US', { style: 'currency', currency: currency, }).format(numAmount); }; const getStatusBadgeClass = (status: string) => { switch (status) { case 'pending': return 'bg-gradient-to-r from-muted-gold/20 to-orange-400/20 text-muted-gold border border-muted-gold/30'; case 'paid': return 'bg-gradient-to-r from-maritime-teal/20 to-teal-400/20 text-maritime-teal border border-maritime-teal/30'; case 'fulfilled': return 'bg-gradient-to-r from-sea-green/20 to-green-400/20 text-sea-green border border-sea-green/30'; case 'cancelled': return 'bg-gradient-to-r from-red-500/20 to-red-400/20 text-red-600 border border-red-500/30'; default: return 'bg-gray-100 text-gray-700 border border-gray-300'; } }; const CopyButton = ({ text, fieldName }: { text: string; fieldName: string }) => ( ); const DetailField = ({ label, value, copyable = false, fieldName = '', }: { label: string; value: string | number | undefined | null; copyable?: boolean; fieldName?: string; }) => { const displayValue = value || 'N/A'; return (
{label}
{displayValue}
{copyable && value && }
); }; const SectionHeader = ({ title }: { title: string }) => (

{title}

); return ( {isOpen && ( <> {/* Backdrop */} {/* Sliding Panel */} {/* Header */}

Order Details

ID: {order.orderId.substring(0, 12)}...

{/* Scrollable Content */}
{/* Order Information */}
Status
{order.status.charAt(0).toUpperCase() + order.status.slice(1)}
{/* Payment Details */}
{order.amountUSD && ( )}
{/* Customer Information */}
{order.businessName && ( <> )}
{/* Billing Address */}
{/* Carbon Offset Details */}
CO₂ Offset
{parseFloat(order.co2Tons).toFixed(2)} tons
{order.certificateUrl && (
Certificate URL
View Certificate
)}
{/* Vessel Information (if applicable) */} {(order.vesselName || order.imoNumber || order.vesselType || order.vesselLength) && (
)} {/* Trip Details (if applicable) */} {(order.departurePort || order.arrivalPort || order.distance || order.avgSpeed || order.duration || order.enginePower) && (
)} {/* Admin Notes */} {order.notes && (

{order.notes}

)}
{/* Footer */}
)}
); }