import React, { useState, useEffect } from 'react'; import { db } from '../../firebase/config'; import { ref, onValue } from 'firebase/database'; import { Users, Truck, Heart, Star, Phone, MapPin, History, Search } from 'lucide-react'; export default function CRMManager() { const [customers, setCustomers] = useState([]); const [deliveryOrders, setDeliveryOrders] = useState([]); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { // Analytics for CRM (from Orders) onValue(ref(db, 'orders'), (snapshot) => { const data = snapshot.val(); if (data) { const orders = Object.values(data); const customerMap = {}; const deliveries = []; orders.forEach(order => { if (order.customerEmail) { const email = order.customerEmail; if (!customerMap[email]) { customerMap[email] = { email, name: order.customerName || 'Cliente', totalSpent: 0, orderCount: 0, lastOrder: 0 }; } customerMap[email].totalSpent += order.total; customerMap[email].orderCount += 1; if (order.timestamp > customerMap[email].lastOrder) { customerMap[email].lastOrder = order.timestamp; } } if (order.type === 'delivery') { deliveries.push(order); } }); setCustomers(Object.values(customerMap).sort((a,b) => b.totalSpent - a.totalSpent)); setDeliveryOrders(deliveries.sort((a,b) => b.timestamp - a.timestamp)); } }); }, []); const filteredCustomers = customers.filter(c => c.email.toLowerCase().includes(searchTerm.toLowerCase()) || c.name.toLowerCase().includes(searchTerm.toLowerCase()) ); return (

CRM & Fidelización

Gestión de clientes frecuentes y seguimiento de delivery

{/* Customer List */}

Clientes Frecuentes

setSearchTerm(e.target.value)} style={{ ...inputStyle, paddingLeft: '30px', padding: '0.4rem 0.5rem 0.4rem 2rem', fontSize: '0.8rem' }} />
{filteredCustomers.map((c, i) => (
{i < 3 ? : i + 1}
{c.name}
{c.email}
${c.totalSpent.toFixed(2)}
{c.orderCount} visitas | {Math.floor(c.totalSpent / 10)} pts
))}
{/* Delivery Activity */}

Monitor de Delivery

{deliveryOrders.slice(0, 10).map(order => (
#{order.id.slice(-5)} - {order.customerName} {order.status.toUpperCase()}
{order.address || 'Local / Para llevar'}
{new Date(order.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
))} {deliveryOrders.length === 0 &&

No hay pedidos delivery recientes

}
); } const inputStyle = { width: '100%', padding: '0.8rem', borderRadius: '8px', background: 'rgba(0,0,0,0.03)', border: '1px solid var(--border-subtle)', color: 'var(--text-main)', outline: 'none' }; const sectionTitleStyle = { fontSize: '1.2rem', fontWeight: '700', display: 'flex', alignItems: 'center', gap: '0.75rem' };