import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { Shell } from '../layouts/Shell' import { useCartStore, selectGroupedCart, selectCartSummary } from '../stores/cartStore' import { useAuth } from '../context/AuthContext' import { ordersService, CreateOrderRequest } from '../services/ordersService' import { formatCurrency } from '../utils/format' import { ArrowLeft, CheckCircle2, Truck } from 'lucide-react' export function CheckoutPage() { const navigate = useNavigate() const { user } = useAuth() const groups = useCartStore(selectGroupedCart) const summary = useCartStore(selectCartSummary) const clearAll = useCartStore((state) => state.clearAll) const [loading, setLoading] = useState(false) const [shipping, setShipping] = useState({ recipient_name: user?.name || '', street: '', number: '', complement: '', district: '', city: '', state: '', zip_code: '', country: 'Brasil' }) const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target setShipping(prev => ({ ...prev, [name]: value })) } const handlePlaceOrder = async () => { if (!user) return setLoading(true) try { // Create an order for each vendor group const promises = Object.entries(groups).map(([sellerId, group]) => { const orderData: CreateOrderRequest = { buyer_id: user.id, seller_id: sellerId, items: group.items.map(item => ({ product_id: item.id, quantity: item.quantity, unit_cents: item.unitPrice, batch: item.batch, expires_at: item.expiry // Ensure format matches backend expectation? Backend expects ISO. Cart stores string? })), shipping: { recipient_name: shipping.recipient_name, street: shipping.street, number: shipping.number, complement: shipping.complement, district: shipping.district, city: shipping.city, state: shipping.state, zip_code: shipping.zip_code, country: shipping.country } } return ordersService.createOrder(orderData) }) await Promise.all(promises) clearAll() navigate('/orders') } catch (error) { console.error('Failed to create order', error) alert('Erro ao criar pedido. Verifique os dados e tente novamente.') } finally { setLoading(false) } } if (summary.totalItems === 0) { return (

Seu carrinho está vazio

) } return (

Finalizar Compra

{/* Left Column: Form */}

Endereço de Entrega

{/* Payment Method Stub */}

Pagamento

Este é um ambiente de demonstração. O pagamento será processado como "Confirmado" para fins de teste.

Método de Teste (Aprovação Automática)
{/* Right Column: Summary */}

Resumo do Pedido

{Object.entries(groups).map(([vendorId, group]) => (

{group.vendorName}

{group.items.map(item => (
{item.quantity}x {item.name} R$ {formatCurrency(item.quantity * item.unitPrice)}
))}
))}
Total R$ {formatCurrency(summary.totalValue)}
) }