import { useEffect, useState } from 'react'; import { motion } from 'framer-motion'; import { getOrderDetails } from '../api/checkoutClient'; import { OrderDetailsResponse } from '../types'; import { CarbonImpactComparison } from '../components/CarbonImpactComparison'; import { useCalculatorState } from '../hooks/useCalculatorState'; interface CheckoutSuccessProps { onNavigateHome: () => void; onNavigateCalculator: () => void; } export default function CheckoutSuccess({ onNavigateHome, onNavigateCalculator }: CheckoutSuccessProps) { const [orderDetails, setOrderDetails] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const { clearState } = useCalculatorState(); // Clear calculator state on successful payment (per user preference) useEffect(() => { if (orderDetails && (orderDetails.order.status === 'paid' || orderDetails.order.status === 'fulfilled')) { clearState(); } }, [orderDetails, clearState]); useEffect(() => { const fetchOrderDetails = async () => { // Get session ID from URL const params = new URLSearchParams(window.location.search); const sessionId = params.get('session_id'); if (!sessionId) { setError('No session ID found in URL'); setLoading(false); return; } try { const details = await getOrderDetails(sessionId); setOrderDetails(details); } catch (err) { setError('Failed to load order details'); console.error(err); } finally { setLoading(false); } }; fetchOrderDetails(); }, []); if (loading) { return (

Loading your order details...

); } if (error || !orderDetails) { return (
⚠️

Order Not Found

{error || 'Unable to retrieve order details'}

); } const { order, session } = orderDetails; const totalAmount = order.totalAmount / 100; // Convert cents to dollars const baseAmount = order.baseAmount / 100; const processingFee = order.processingFee / 100; return (
{/* Success Header */}

Payment Successful!

Thank you for offsetting your carbon footprint

{/* Order Details Card */}

Order Summary

{/* Offset Amount */}
Carbon Offset {order.tons} tons CO₂
{/* Portfolio */}
Portfolio Portfolio #{order.portfolioId}
{/* Base Amount */}
Offset Cost ${baseAmount.toFixed(2)}
{/* Processing Fee */}
Processing Fee (5%) ${processingFee.toFixed(2)}
{/* Total */}
Total Paid ${totalAmount.toFixed(2)}
{/* Order Info */}
Order ID

{order.id}

Status

{order.status.toUpperCase()}

{session.customerEmail && (
Email

{session.customerEmail}

)}
{/* Impact Comparisons */}
{/* Action Buttons */} {/* Confirmation Email Notice */} {session.customerEmail && ( A confirmation email has been sent to {session.customerEmail} )}
); }