'use client'; import React, { useState, useEffect } from 'react'; import { ShoppingBag, Truck, CheckCircle2, Clock, Phone, MapPin, Search, MessageCircle, Send, ShieldCheck, UserCheck } from 'lucide-react'; import { Order, OrderItem } from '@/types'; import { formatCOP } from '@/lib/pricing-engine'; export default function AdminOrdersPage() { const [orders, setOrders] = useState([]); const [search, setSearch] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); useEffect(() => { fetch('/api/orders') .then((r) => r.json()) .then((d) => d.success && setOrders(d.orders)) .catch(() => {}); }, []); const handleStatusChange = async (orderId: string, newStatus: Order['status']) => { setOrders((prev) => prev.map((o) => (o.id === orderId ? { ...o, status: newStatus } : o)) ); await fetch('/api/orders', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: orderId, status: newStatus }), }).catch(() => {}); }; const handleNotifySupplier = (order: Order, item: OrderItem) => { const supplierPhone = item.supplierPhone || '573134848203'; const supplierName = item.supplierName || 'Proveedor Mayorista'; const supplierCost = item.supplierPrice ? formatCOP(item.supplierPrice) : 'Precio Mayorista'; const message = `👋 Hola *${supplierName}*!\n\nPor favor *sepárame este par* para despacho inmediato:\n\n👟 *Modelo:* ${item.productName}\n📏 *Talla:* ${item.size}\n📦 *Cantidad:* ${item.quantity} par(es)\n💵 *Costo Base:* ${supplierCost}\n\n🏷️ *Orden Interna:* #${order.id}\n📍 *Ciudad Destino:* ${order.cityName}\n\n¿Me confirmas si lo tienes listo para recoger / enviar? ¡Muchas gracias!`; const url = `https://wa.me/${supplierPhone}?text=${encodeURIComponent(message)}`; window.open(url, '_blank'); // Auto-update status to supplier_notified if still pending if (order.status === 'pending' || order.status === 'deposit_received') { handleStatusChange(order.id, 'supplier_notified'); } }; const getStatusBadge = (status: Order['status']) => { switch (status) { case 'pending': return Pendiente Confirmar; case 'deposit_received': return Separación $10k Pagada; case 'supplier_notified': return Proveedor Notificado; case 'dispatched': return En Ruta con Mensajero; case 'delivered': return Entregado & Cobrado; case 'cancelled': return Cancelado; } }; const filteredOrders = orders.filter((o) => { const matchesSearch = o.customerName.toLowerCase().includes(search.toLowerCase()) || o.customerPhone.includes(search) || o.cityName.toLowerCase().includes(search.toLowerCase()) || o.id.toLowerCase().includes(search.toLowerCase()); if (!matchesSearch) return false; if (statusFilter !== 'all' && o.status !== statusFilter) return false; return true; }); return (
{/* Header */}

Gestión de Pedidos & Separación con Proveedores ({orders.length})

Control logístico de pedidos contraentrega, cobro de anticipos de $10.000 COP y notificación inmediata de separación al proveedor vía WhatsApp.

{/* Toolbar */}
setSearch(e.target.value)} className="w-full bg-slate-900 border border-slate-800 rounded-xl px-3.5 py-2 text-xs text-white outline-hidden focus:border-cyan-400" />
{filteredOrders.length === 0 ? (

No hay pedidos en esta sección

Cuando los clientes hagan un pedido en la tienda web o por WhatsApp, aparecerán aquí con el botón para separar inmediatamente con el proveedor correspondiente.

) : (
{filteredOrders.map((order) => (
{/* Top Order bar */}
Orden #{order.id} • {new Date(order.createdAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
{getStatusBadge(order.status)}
{/* Customer Details */}
Cliente & Entrega (24 Horas)

{order.customerName}

{order.customerPhone}

{order.address} ({order.cityName})

{/* Items and Supplier Separation Action */}
Zapatillas & Proveedor Asignado:
{order.items.map((it, idx) => { const suppName = it.supplierName || 'DIFUSION JOVIC STORE'; return (

{it.productName}

Talla {it.size} • Cant: {it.quantity}

Prov: {suppName}
{/* 1-Click WhatsApp Separation Button */}
); })}
{/* Payment Breakdown */}
Cobro & Pagos Contraentrega

Total de la Orden: {formatCOP(order.totalAmount)}

{order.depositAmount > 0 ? ( <>

Anticipo / Separación: {formatCOP(order.depositAmount)}

Saldo al Mensajero: {formatCOP(order.balanceDue)}

) : (

100% Contraentrega al recibir

)}
{/* Order Status Action Buttons */}
Método: {order.paymentMethodName}
))}
)}
); }