"use client"; import { useState } from "react"; import { AlertTriangle } from "lucide-react"; import { cn } from "@/lib/utils"; interface NutriScoreBadgeProps { grade: string; className?: string; size?: "sm" | "md" | "lg"; showTooltip?: boolean; } export function NutriScoreBadge({ grade, className, size = "md", showTooltip = true, }: NutriScoreBadgeProps) { const [showInfo, setShowInfo] = useState(false); const getGradeInfo = (grade: string) => { const grades = { a: { label: "A", color: "bg-gradient-to-br from-green-400 to-green-600", textColor: "text-white", description: "Muito bom", explanation: "Produto com excelente qualidade nutricional", pulse: false, }, b: { label: "B", color: "bg-gradient-to-br from-green-300 to-green-500", textColor: "text-white", description: "Bom", explanation: "Produto com boa qualidade nutricional", pulse: false, }, c: { label: "C", color: "bg-gradient-to-br from-yellow-400 to-yellow-600", textColor: "text-white", description: "Regular", explanation: "Produto com qualidade nutricional regular", pulse: false, }, d: { label: "D", color: "bg-gradient-to-br from-orange-400 to-orange-600", textColor: "text-white", description: "Ruim", explanation: "Produto com qualidade nutricional ruim", pulse: true, }, e: { label: "E", color: "bg-gradient-to-br from-red-400 to-red-600", textColor: "text-white", description: "Muito ruim", explanation: "Produto com qualidade nutricional muito ruim", pulse: true, }, }; return grades[grade.toLowerCase() as keyof typeof grades] || null; }; const gradeInfo = getGradeInfo(grade); if (!gradeInfo) return null; const sizeClasses = { sm: "w-8 h-8 text-sm", md: "w-16 h-16 text-xl", lg: "w-20 h-20 text-2xl", }; return (
setShowInfo(true)} onMouseLeave={() => setShowInfo(false)} > {gradeInfo.label} {/* Efeito de brilho para notas baixas */} {gradeInfo.pulse && (
)}
{/* Tooltip informativo */} {showTooltip && showInfo && (
Nutri-Score {gradeInfo.label} {gradeInfo.pulse && ( )}

{gradeInfo.description}

{gradeInfo.explanation}

{/* Seta do tooltip */}
)} {/* Badge de alerta para notas baixas */} {gradeInfo.pulse && (
)}
); } interface NovaBadgeProps { group: number; className?: string; size?: "sm" | "md" | "lg"; showTooltip?: boolean; } export function NovaBadge({ group, className, size = "md", showTooltip = true, }: NovaBadgeProps) { const [showInfo, setShowInfo] = useState(false); const getGroupInfo = (group: number) => { const groups = { 1: { label: "1", color: "bg-gradient-to-br from-green-400 to-green-600", textColor: "text-white", description: "Não processado", explanation: "Alimentos não processados ou minimamente processados", pulse: false, }, 2: { label: "2", color: "bg-gradient-to-br from-yellow-400 to-yellow-600", textColor: "text-white", description: "Ingredientes", explanation: "Ingredientes culinários processados", pulse: false, }, 3: { label: "3", color: "bg-gradient-to-br from-orange-400 to-orange-600", textColor: "text-white", description: "Processado", explanation: "Alimentos processados", pulse: true, }, 4: { label: "4", color: "bg-gradient-to-br from-red-400 to-red-600", textColor: "text-white", description: "Ultraprocessado", explanation: "Alimentos ultraprocessados", pulse: true, }, }; return groups[group as keyof typeof groups] || null; }; const groupInfo = getGroupInfo(group); if (!groupInfo) return null; const sizeClasses = { sm: "w-8 h-8 text-sm", md: "w-16 h-16 text-xl", lg: "w-20 h-20 text-2xl", }; return (
setShowInfo(true)} onMouseLeave={() => setShowInfo(false)} > {groupInfo.label} {/* Efeito de brilho para grupos altos */} {groupInfo.pulse && (
)}
{/* Tooltip informativo */} {showTooltip && showInfo && (
NOVA {groupInfo.label} {groupInfo.pulse && ( )}

{groupInfo.description}

{groupInfo.explanation}

{/* Seta do tooltip */}
)} {/* Badge de alerta para grupos altos */} {groupInfo.pulse && (
)}
); }