import React, { useState, useEffect, useMemo } from 'react'; import { createRoot } from 'react-dom/client'; import { ShoppingBag, X, ChevronRight, Flame, Star, MapPin, MessageSquare, Plus, Minus, Trash2, Clock, ArrowRight, Instagram, Twitter, Youtube, Phone, RefreshCw, Award, ExternalLink } from 'lucide-react'; import { GoogleGenAI, Type } from '@google/genai'; import { motion, AnimatePresence } from 'framer-motion'; // --- Types --- interface MenuItem { id: number; name: string; price: number; description: string; category: 'beef' | 'chicken' | 'veggie' | 'special'; image: string; tags: string[]; } interface CartItem extends MenuItem { quantity: number; } interface AiSuggestion { text: string; recommendedItemId: number | null; } // --- Data --- const MENU_ITEMS: MenuItem[] = [ { id: 1, name: "Cyborg Prime", price: 48.90, description: "200g de blend Wagyu, cheddar inglês 12 meses, cebola caramelizada no Bourbon e aioli de carvão ativado.", category: 'beef', image: "https://images.unsplash.com/photo-1568901346375-23c9450c58cd?auto=format&fit=crop&q=80&w=800", tags: ["Best Seller", "Wagyu"] }, { id: 2, name: "Neon Chicken", price: 36.50, description: "Frango crocante empanado na Panko com especiarias orientais, kimchi artesanal e molho de gergelim.", category: 'chicken', image: "https://images.unsplash.com/photo-1625813506062-0aeb1d7a094b?auto=format&fit=crop&q=80&w=800", tags: ["Umami"] }, { id: 3, name: "Zen Garden", price: 39.00, description: "Burger de cogumelos defumados, queijo de castanhas, maionese de manjericão e brotos de beterraba.", category: 'veggie', image: "https://images.unsplash.com/photo-1520072959219-c595dc870360?auto=format&fit=crop&q=80&w=800", tags: ["Veggie", "Clean Eat"] }, { id: 4, name: "Eclipsed Melt", price: 52.00, description: "Triplo Smash de Black Angus, crosta de pimenta fermentada e fondue de queijos suíços no pão negro.", category: 'special', image: "https://images.unsplash.com/photo-1594212699903-ec8a3eca50f5?auto=format&fit=crop&q=80&w=800", tags: ["Intenso", "Gourmet"] }, { id: 5, name: "Vulcan Flame", price: 44.90, description: "Burger suíno duroc, geleia de bacon com pimenta habanero, crispy de couve e queijo brie maçaricado.", category: 'special', image: "https://images.unsplash.com/photo-1550317138-10000687ad32?auto=format&fit=crop&q=80&w=800", tags: ["Spicy", "Chef Choice"] } ]; // --- Components --- const Navbar = ({ cartCount, onCartClick, scrollToSection }: { cartCount: number, onCartClick: () => void, scrollToSection: (id: string) => void }) => ( ); const App = () => { const [cart, setCart] = useState([]); const [isCartOpen, setIsCartOpen] = useState(false); const [activeCategory, setActiveCategory] = useState('all'); const [aiSuggestion, setAiSuggestion] = useState(null); const [userMood, setUserMood] = useState(''); const [isAiLoading, setIsAiLoading] = useState(false); const addToCart = (item: MenuItem) => { setCart(prev => { const existing = prev.find(i => i.id === item.id); if (existing) { return prev.map(i => i.id === item.id ? { ...i, quantity: i.quantity + 1 } : i); } return [...prev, { ...item, quantity: 1 }]; }); }; const removeFromCart = (id: number) => { setCart(prev => prev.filter(i => i.id !== id)); }; const updateQuantity = (id: number, delta: number) => { setCart(prev => prev.map(item => { if (item.id === id) { const newQty = Math.max(1, item.quantity + delta); return { ...item, quantity: newQty }; } return item; })); }; const cartTotal = useMemo(() => cart.reduce((sum, item) => sum + (item.price * item.quantity), 0), [cart]); const cartCount = useMemo(() => cart.reduce((sum, item) => sum + item.quantity, 0), [cart]); const filteredMenu = activeCategory === 'all' ? MENU_ITEMS : MENU_ITEMS.filter(item => item.category === activeCategory); const scrollToSection = (id: string) => { const el = document.getElementById(id); if (el) { const offset = 100; const elementPosition = el.getBoundingClientRect().top; const offsetPosition = elementPosition + window.pageYOffset - offset; window.scrollTo({ top: offsetPosition, behavior: 'smooth' }); } }; const askAiConcierge = async (e: React.FormEvent) => { e.preventDefault(); if (!userMood.trim()) return; setIsAiLoading(true); setAiSuggestion(null); try { const ai = new GoogleGenAI({ apiKey: process.env.API_KEY || '' }); const prompt = `Você é o "Taste Butler" da Burger Vibe, operado por "Get Your Supreme". Nossos pratos são criações exclusivas assinadas pelo Master Chef Alejandro Stones. O cliente disse: "${userMood}". Baseado em nosso cardápio: ${JSON.stringify(MENU_ITEMS)}, escolha o melhor item que harmonize com a descrição. Retorne um JSON estrito com: - text: uma resposta sofisticada, curta e empática explicando por que essa escolha é perfeita para o momento dele. - recommendedItemId: o ID numérico do item escolhido (ou null se nada combinar).`; const response = await ai.models.generateContent({ model: 'gemini-3-flash-preview', contents: prompt, config: { responseMimeType: "application/json", responseSchema: { type: Type.OBJECT, properties: { text: { type: Type.STRING }, recommendedItemId: { type: Type.INTEGER, nullable: true } }, required: ["text", "recommendedItemId"] } } }); const data = JSON.parse(response.text || '{}'); setAiSuggestion({ text: data.text || "O Master Chef Alejandro Stones recomenda o Cyborg Prime para elevar sua experiência hoje.", recommendedItemId: data.recommendedItemId || null }); } catch (error) { console.error(error); setAiSuggestion({ text: "Desculpe, houve uma pequena interferência em nosso sistema. Que tal provar a assinatura do Chef: Cyborg Prime?", recommendedItemId: 1 }); } finally { setIsAiLoading(false); } }; const recommendedItem = useMemo(() => { if (!aiSuggestion?.recommendedItemId) return null; return MENU_ITEMS.find(i => i.id === aiSuggestion.recommendedItemId); }, [aiSuggestion]); const handleWhatsAppCheckout = () => { const phone = "47991814606"; let message = `🍔 *PEDIDO SUPREME - BURGER VIBE*\n_Chef Alejandro Stones Selection_\n\n`; cart.forEach(item => { message += `• ${item.quantity}x ${item.name} - R$ ${(item.price * item.quantity).toFixed(2)}\n`; }); message += `\n💵 *Total: R$ ${cartTotal.toFixed(2)}*\n\n📍 *Unidade: Balneário Shopping*\n\n🚀 _Pode prosseguir com meu pedido?_`; const encodedMessage = encodeURIComponent(message); window.open(`https://wa.me/55${phone}?text=${encodedMessage}`, '_blank'); }; const openGoogleMaps = () => { window.open(`https://www.google.com/maps/search/?api=1&query=Balneário+Shopping+Balneário+Camboriú+SC`, '_blank'); }; return (
setIsCartOpen(true)} scrollToSection={scrollToSection} /> {/* Hero Section */}
{/* Animated Background Gradients */}
Get Your Supreme Experience

DEFINA
SEU PALADAR

Master Chef Alejandro Stones
| Balneário Shopping • BC
scrollToSection('menu')} className="px-12 py-6 bg-white text-black font-black text-xs rounded-2xl transition-all shadow-2xl hover:shadow-[#FF5F00]/30 uppercase tracking-[0.2em]" > Start Order scrollToSection('concierge')} className="px-12 py-6 bg-white/5 hover:bg-white/10 border border-white/10 text-white font-black text-xs rounded-2xl transition-all backdrop-blur-sm uppercase tracking-[0.2em]" > Talk to AI
{/* Menu Grid */} {/* AI Concierge Section */}

Digital Concierge

O SEU
BUTLER

Consulte nosso assistente treinado pela Get Your Supreme para identificar qual criação do Chef Alejandro Stones mais combina com seu momento.

Validated by Alejandro Stones

{!aiSuggestion ? (