"use client"; import { useState } from "react"; import Link from "next/link"; import { formatMessage } from "@/lib/i18n/shared"; import { useDict } from "@/components/i18n/LocaleProvider"; import LanguageSwitcher from "@/components/i18n/LanguageSwitcher"; export default function SuggestionForm() { const dict = useDict(); const [name, setName] = useState(""); const [description, setDescription] = useState(""); // Honeypot: für echte Nutzer unsichtbares Feld. Füllt ein Bot es aus, // tun wir so, als sei alles gut gegangen, ohne wirklich zu speichern. const [website, setWebsite] = useState(""); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const [busy, setBusy] = useState(false); async function submit(e: React.FormEvent) { e.preventDefault(); setError(null); const trimmedName = name.trim(); if (!trimmedName) { setError(dict.suggestions.nameRequired); return; } if (website.trim()) { // Bot-Falle ausgelöst: keine echte Anfrage, aber Erfolg vortäuschen. setSuccess(true); return; } setBusy(true); const res = await fetch("/api/dish-suggestions", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: trimmedName, description: description.trim() || null }), }); if (!res.ok) { const data = await res.json().catch(() => ({})); setError( data.error === "duplicate" ? dict.suggestions.duplicate : formatMessage(dict.suggestions.genericError, { message: data.error ?? String(res.status), }) ); setBusy(false); return; } setSuccess(true); setBusy(false); } return (

{dict.suggestions.formTitle}

{dict.suggestions.formHint}

{success ? (

{dict.suggestions.success}

) : (
setName(e.target.value)} required />