"use client"; import React, { useState, useMemo } from "react"; import { useRouter } from "next/navigation"; import { Search, ScanLine, Globe, Activity, Database, Zap, Moon, Sun } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { useGeolocation } from "@/hooks/use-geolocation"; import { useSearchLogic } from "@/hooks/use-search-logic"; import { useTheme } from "next-themes"; import { cn } from "@/lib/utils"; import { motion, AnimatePresence } from "framer-motion"; export function Hero() { const router = useRouter(); const [searchQuery, setSearchQuery] = useState(""); const { countryCode, isMounted } = useGeolocation(); const { searchType, isValid, loading, setLoading } = useSearchLogic(searchQuery); const { theme } = useTheme(); const searchConfig = useMemo(() => ({ barcode: { placeholder: "Insira o código EAN/UPC (ex: 789...)", button: "Analisar Produto", icon: , subtext: "Protocolo: Detecção de Código de Barras", color: "blue", gradient: "from-blue-600 via-cyan-500 to-blue-400" }, name: { placeholder: "Qual alimento deseja investigar?", button: "Consultar Banco", icon: , subtext: "Protocolo: Pesquisa em Base Colaborativa", color: "emerald", gradient: "from-emerald-600 via-teal-500 to-green-400" }, auto: { placeholder: "Digite o nome ou aponte o código...", button: "Buscar", icon: , subtext: "Aguardando input do operador...", color: "slate", gradient: "from-slate-600 via-blue-500 to-slate-400" } }), []); const current = searchConfig[searchType]; const handleSearch = async (e: React.FormEvent) => { e.preventDefault(); if (!searchQuery.trim()) return; setLoading(true); const target = searchType === "barcode" && isValid ? `/produto/${searchQuery.trim()}` : `/resultados?q=${encodeURIComponent(searchQuery.trim())}${countryCode ? `&country=${countryCode}` : ""}`; router.push(target); }; return ( {/* 1. INFRAESTRUTURA VISUAL: Background de Engenharia */} {/* Grid de Coordenadas */} {/* Glow de Fundo Reativo */} {/* Elemento Decorativo Lua/Sol */} {theme === "dark" ? ( ) : ( )} {/* 2. BADGE DE STATUS DO SISTEMA */} NutriScan Protocol v2.1 • {isMounted ? countryCode?.toUpperCase() : "INTL"} {/* 3. HEADLINE DE ALTA DENSIDADE */} A verdade sobre seus alimentos. Engenharia de dados aplicada à transparência nutricional. Descriptografamos rótulos para que você tome decisões soberanas. {/* 4. O TERMINAL DE BUSCA (A PEÇA CENTRAL) */} {/* Efeito de Borda Neon Reativa */} {/* Ícone de Estado Animado */} {current.icon} setSearchQuery(e.target.value)} className="pl-16 pr-4 py-9 text-xl border-0 bg-transparent focus-visible:ring-0 w-full text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-slate-600 font-medium tracking-tight transition-colors duration-500" /> {loading ? ( ) : ( {current.button} )} {/* 5. METADADOS DA OPERAÇÃO */} {current.subtext} {isMounted && countryCode && ( Region: {countryCode.toUpperCase()} )} {/* 6. INDICADOR DE MÉTRICAS (Bottom Shelf) */} 2M+ Dataset Entries 100% Open Source < 10s Analysis Speed ); } // Sub-componente auxiliar para ícone function ArrowRight({ size, className }: { size: number, className?: string }) { return ( ); }
Engenharia de dados aplicada à transparência nutricional. Descriptografamos rótulos para que você tome decisões soberanas.