import React, { useEffect, useState } from "react"; import { collection, query, where, onSnapshot, Timestamp, addDoc, setDoc, doc, serverTimestamp } from "firebase/firestore"; import { db } from "../../firebase"; import { useAuth } from "../../context/AuthContext"; import { negocioService, type Negocio } from "../../services/negocioService"; import { toast } from "react-hot-toast"; import { UtensilsCrossed, CalendarCheck, ShoppingBag, DollarSign, QrCode, Monitor, BookOpen, Package, FileText, CreditCard, Receipt, Brain, Bot, ExternalLink, ChevronRight, } from "lucide-react"; interface KPIs { comandasActivas: number; reservasHoy: number; ticketsPendientes: number; ventasHoy: number; } const MODULOS = [ { id: "pos", emoji: "💳", label: "Punto de venta", desc: "Cobra rápido con imágenes", href: "/restaurante/pos", from: "#16a34a", to: "#22c55e" }, { id: "comandas", emoji: "🍳", label: "Comandas", desc: "Pantalla de cocina en tiempo real", href: "/restaurante/comandas", from: "#ea580c", to: "#f97316" }, { id: "menu_qr", emoji: "📱", label: "Menú & QR", desc: "Edita la carta y genera QR", href: "/restaurante/menu", from: "#0284c7", to: "#0ea5e9" }, { id: "inventario", emoji: "📦", label: "Inventario", desc: "Stock, imágenes y alertas", href: "/restaurante/inventario", from: "#7c3aed", to: "#a855f7" }, { id: "gastos", emoji: "📊", label: "Gastos", desc: "Registra y analiza costos", href: "/restaurante/gastos", from: "#dc2626", to: "#f87171" }, { id: "reservas", emoji: "📅", label: "Reservas", desc: "Mesas y reservaciones", href: "/restaurante/reservas", from: "#0891b2", to: "#22d3ee" }, { id: "gerente_ia", emoji: "🧠", label: "Gerente IA", desc: "Análisis inteligente del negocio", href: "/restaurante/gerente", from: "#4f46e5", to: "#818cf8" }, { id: "compras", emoji: "🛒", label: "Agrovida Foods", desc: "Insumos con descuento 20%", href: "/restaurante/compras", from: "#d97706", to: "#fbbf24" }, { id: "facturacion",emoji: "🧾", label: "Facturación DIAN", desc: "Facturas con sello DIAN", href: "/restaurante/facturacion", from: "#475569", to: "#64748b" }, { id: "meta_ads", emoji: "📣", label: "Meta Ads IA", desc: "Lanza campañas en Facebook e Instagram con IA", href: "/negocio/meta-ads", from: "#1877f2", to: "#0a52c4" }, ]; // ── Pantalla de recuperación para registros incompletos ────────────────────── function CompletarRegistro({ uid, email, nombre }: { uid: string; email: string; nombre: string }) { const [restaurante, setRestaurante] = useState(""); const [telefono, setTelefono] = useState(""); const [loading, setLoading] = useState(false); async function handleCompletar(e: React.FormEvent) { e.preventDefault(); if (!restaurante.trim()) { toast.error("Escribe el nombre del establecimiento"); return; } setLoading(true); try { const modulos = ["reservas", "menu_qr", "comandas", "pos", "finanzas", "inventario", "gastos"]; const negRef = await addDoc(collection(db, "negocios"), { nombre: restaurante.trim(), tipo: "restaurante", ownerUid: uid, ownerId: uid, ownerNombre: nombre, ownerEmail: email.toLowerCase(), telefono: telefono.trim(), ciudad: "", suscripcion: { status: "trial", precioMensualCOP: 90000, periodoActual: new Date().toISOString().slice(0, 7), renovacion: new Date(Date.now() + 7 * 86400000).toISOString(), historialPagos: [], }, modulosActivos: modulos, creadoEn: serverTimestamp(), }); await setDoc(doc(db, "users", uid), { negocioId: negRef.id, rolNegocio: "owner", negocioTipo: "restaurante", modulosAutorizados: modulos, }, { merge: true }); toast.success("¡Registro completado! Recargando…"); setTimeout(() => window.location.reload(), 1200); } catch (err: any) { toast.error("Error al completar: " + (err.message || "intenta de nuevo")); } finally { setLoading(false); } } return (
{new Date().toLocaleDateString("es-CO", { weekday: "long", day: "numeric", month: "long" })}
Tus clientes acceden al menú con QR → chatean con el Mesero IA → el pedido aparece automáticamente en Comandas y en Caja.
{negocioId && ( Ver chat del clienteActiva tu suscripción para continuar usando todos los módulos sin límites.