'use client' import { useState, useEffect } from 'react' import Image from 'next/image' import ReCAPTCHA from "react-google-recaptcha" import axios from "axios" import styles from './BookTable.module.css' interface FormErrors { name?: string; phone?: string; date?: string; captcha?: string; } export default function BookTable() { const [email, setEmail] = useState(""); useEffect(() => { const user = "hello"; const domain = "antalyarestaurant.ca"; setEmail(`${user}@${domain}`); }, []); const [formData, setFormData] = useState({ name: "", phone: "", date: "", message: "", }); const [formErrors, setFormErrors] = useState({}); const [captchaToken, setCaptchaToken] = useState(null); const [alert, setAlert] = useState({ show: false, type: "", message: "" }); const [charCount, setCharCount] = useState(0); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value })); if (name === "message") { setCharCount(value.length); } }; const handleCaptchaChange = (token: string | null) => { setCaptchaToken(token); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const errors: FormErrors = {}; if (!formData.name.trim()) errors.name = "Name is required."; if (!formData.phone.trim()) errors.phone = "Phone is required."; if (!formData.date.trim()) errors.date = "Date is required."; if (!captchaToken) errors.captcha = "Please verify the CAPTCHA."; setFormErrors(errors); if (Object.keys(errors).length > 0) return; const emailData = { name: formData.name, phone: formData.phone, email: email, subject: `Table Reservation - ${formData.name} on ${formData.date}`, message: ` Reservation Details:
Name: ${formData.name}
Phone: ${formData.phone}
Date: ${formData.date}

Message:
${formData.message || "None"} `, to: email, senderName: "Antalya Restaurant - Table Reservation", recaptchaToken: captchaToken, }; try { const res = await axios.post( "https://mailserver.metatronnest.com/send", emailData, { headers: { "Content-Type": "application/json" } } ); setAlert({ show: true, type: "success", message: res?.data?.message || "Reservation request sent successfully! We'll contact you soon.", }); setFormData({ name: "", phone: "", date: "", message: "", }); setCaptchaToken(null); setFormErrors({}); setCharCount(0); } catch (error) { setAlert({ show: true, type: "danger", message: "Failed to send reservation request. Please try again later.", }); } }; useEffect(() => { if (alert.show) { const timer = setTimeout(() => { setAlert((prev) => ({ ...prev, show: false })); }, 5000); return () => clearTimeout(timer); } }, [alert.show]); return (
Luxury Restaurant Interior

Book A Table

{alert.show && (
{alert.message}
)}
{/* Name Input with Placeholder */}
{formErrors.name && {formErrors.name}}
{/* Phone Input with Placeholder */}
{formErrors.phone && {formErrors.phone}}
{formErrors.date && {formErrors.date}}
{/* Message Textarea with Placeholder */}