"use client"; import { useState } from "react"; import Link from "next/link"; import { createClient } from "@/lib/supabase/client"; import { formatMessage } from "@/lib/i18n/shared"; import { useDict } from "@/components/i18n/LocaleProvider"; import LanguageSwitcher from "@/components/i18n/LanguageSwitcher"; export default function SuggestionForm() { const supabase = createClient(); 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 { data: existing } = await supabase .from("dishes") .select("id") .ilike("name", trimmedName) .limit(1); if (existing && existing.length > 0) { setError(dict.suggestions.duplicate); setBusy(false); return; } const { error: insertError } = await supabase.from("dish_suggestions").insert({ name: trimmedName, description: description.trim() || null, }); if (insertError) { setError(formatMessage(dict.suggestions.genericError, { message: insertError.message })); setBusy(false); return; } setSuccess(true); setBusy(false); } return (

{dict.suggestions.formTitle}

{dict.suggestions.formHint}

{success ? (

{dict.suggestions.success}

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