"use client"; import { useState, useEffect, useCallback } from "react"; import { sendContactEmail, type ContactPayload } from "@/app/actions/sendContact"; import { useLang } from "@/context/LanguageContext"; import { t } from "@/lib/translations"; function generateCaptcha() { const a = Math.floor(Math.random() * 9) + 1; const b = Math.floor(Math.random() * 9) + 1; return { a, b, answer: a + b }; } const inputClass = "w-full px-4 py-3 rounded-lg border border-outline-variant bg-surface focus:outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 transition-all text-on-surface placeholder:text-on-surface-variant/50"; export default function ContactForm() { const { lang } = useLang(); const tr = t[lang].contact; const [formData, setFormData] = useState>({ name: "", email: "", company: "", phone: "", topic: "", message: "", }); const [captcha, setCaptcha] = useState({ a: 0, b: 0, answer: 0 }); const [captchaInput, setCaptchaInput] = useState(""); const [captchaError, setCaptchaError] = useState(false); const [status, setStatus] = useState<"idle" | "loading" | "success" | "error">("idle"); const [errorMsg, setErrorMsg] = useState(""); const refreshCaptcha = useCallback(() => { setCaptcha(generateCaptcha()); setCaptchaInput(""); setCaptchaError(false); }, []); useEffect(() => { refreshCaptcha(); }, [refreshCaptcha]); function handleChange( e: React.ChangeEvent ) { setFormData((prev) => ({ ...prev, [e.target.name]: e.target.value })); } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (parseInt(captchaInput, 10) !== captcha.answer) { setCaptchaError(true); refreshCaptcha(); return; } setStatus("loading"); const result = await sendContactEmail(formData); if (result.ok) { setStatus("success"); } else { setStatus("error"); setErrorMsg(result.error); refreshCaptcha(); } } function handleReset() { setFormData({ name: "", email: "", company: "", phone: "", topic: "", message: "" }); setStatus("idle"); setErrorMsg(""); refreshCaptcha(); } if (status === "success") { return (
check_circle

{tr.successTitle}

{tr.successDesc}{" "} {formData.email}.

); } return ( <>

{tr.formTitle}