'use client'; import React, { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { toast } from 'react-hot-toast'; import { createOrder, getPaymentMethods, PaymentMethod } from '../../utils/orderApi'; import { useCart } from '../../context/CartContext'; import './Checkout.scss'; interface CheckoutFormData { shippingAddress: string; shippingCity: string; shippingPostalCode: string; shippingCountry: string; contactPhone: string; contactEmail: string; paymentMethod: string; notes: string; } const Checkout: React.FC = () => { const router = useRouter(); const { cartItems, clearCart, totalPrice, totalItems } = useCart(); const [isSubmitting, setIsSubmitting] = useState(false); const [paymentMethods, setPaymentMethods] = useState([]); const [isLoading, setIsLoading] = useState(true); const [formData, setFormData] = useState({ shippingAddress: '', shippingCity: '', shippingPostalCode: '', shippingCountry: '', contactPhone: '', contactEmail: '', paymentMethod: '', notes: '', }); useEffect(() => { const loadPaymentMethods = async () => { setIsLoading(true); try { const methods = await getPaymentMethods(); setPaymentMethods(methods); if (methods.length > 0) { setFormData(prev => ({ ...prev, paymentMethod: methods[0].name })); } } catch (error) { console.error('Failed to load payment methods:', error); toast.error('Failed to load payment methods'); } finally { setIsLoading(false); } }; loadPaymentMethods(); }, []); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (cartItems.length === 0) { toast.error('Your cart is empty'); return; } try { setIsSubmitting(true); const orderItems = cartItems.map(item => ({ id: item.id, quantity: item.quantity, })); const response = await createOrder({ items: orderItems, ...formData, }); sessionStorage.setItem('orderConfirmation', 'true'); sessionStorage.setItem('orderDetails', JSON.stringify({ orderNumber: response.order?.order_number || 'Unknown', totalAmount: response.order?.total_amount || 0, email: formData.contactEmail, date: new Date().toISOString(), paymentMethod: formData.paymentMethod })); toast.success('Order placed successfully!'); clearCart(); router.push('/order-confirmation'); } catch (error) { console.error('Failed to place order:', error); toast.error('Failed to place order. Please try again.'); } finally { setIsSubmitting(false); } }; return (

Shipping Information

Payment Method

{isLoading ? (

Loading payment methods...

) : (
{paymentMethods.length > 0 ? ( paymentMethods.map((method) => (
)) ) : (

No payment methods available

)}
)}