"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { Wine, Sparkles, Loader2, Coffee, Beer, GlassWater, Leaf } from "lucide-react"; import { FakeProgressBar } from "@/components/ui/fake-progress-bar"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, } from "@/components/ui/dialog"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; type Drink = { name: string; type: "wine" | "beer" | "cocktail" | "spirit" | "non-alcoholic" | "hot"; alcoholic: boolean; description: string; examples: string[]; whyItPairs: string; servingTip?: string; }; const TYPE_ICON: Record = { wine: Wine, beer: Beer, cocktail: Wine, spirit: Wine, "non-alcoholic": GlassWater, hot: Coffee, }; const TYPE_LABEL_KEY: Record = { wine: "drinksTypeWine", beer: "drinksTypeBeer", cocktail: "drinksTypeCocktail", spirit: "drinksTypeSpirit", "non-alcoholic": "drinksTypeNonAlcoholic", hot: "drinksTypeHot", }; export function DrinkPairingButton({ recipeId }: { recipeId: string }) { const t = useTranslations("recipe"); const [open, setOpen] = useState(false); const [loading, setLoading] = useState(false); const [drinks, setDrinks] = useState([]); async function suggest() { setLoading(true); setDrinks([]); try { const res = await fetch(`/api/v1/ai/drinks/${recipeId}`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ count: 4 }), }); if (!res.ok) { toast.error(t("pairingDrinkFailed")); return; } const data = await res.json() as { drinks: Drink[] }; setDrinks(data.drinks); } finally { setLoading(false); } } function handleOpen() { setOpen(true); if (drinks.length === 0) suggest(); } return ( <> } /> {t("drinksTooltip")} {t("drinksDialogTitle")} {t("drinksDialogDescription")} {loading ? (
) : drinks.length === 0 ? (
) : (
{drinks.map((drink, i) => { const Icon = TYPE_ICON[drink.type]; return (
{drink.name} {t(TYPE_LABEL_KEY[drink.type])} {!drink.alcoholic && ( {t("drinksTypeNonAlcoholic")} )}

{drink.description}

{drink.examples.length > 0 && (

{t("drinksExamplesLabel")} {drink.examples.join(" ยท ")}

)}

“{drink.whyItPairs}”

{drink.servingTip && (

{drink.servingTip}

)}
{i < drinks.length - 1 && }
); })}
)}
); }