"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 && (
)}
);
}