'use client' import React, { useState } from 'react' import { CheckCircle2, AlertCircle, ArrowRight, RotateCcw } from 'lucide-react' type FormState = 'idle' | 'loading' | 'success' | 'error' const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ const ACCENT = '#E61919' const ACCENT_DARK = '#B8140F' const ACCENT_SOFT = '#FDEEEC' export default function ContactForm() { const [state, setState] = useState('idle') const [errorMessage, setErrorMessage] = useState('') const [form, setForm] = useState({ name: '', org: '', email: '', phone: '', _hp: '' }) const [touched, setTouched] = useState<{ [key: string]: boolean }>({}) const [fieldErrors, setFieldErrors] = useState<{ [key: string]: string }>({}) const validate = () => { const errors: { [key: string]: string } = {} if (!form.name.trim() || form.name.trim().length < 2) { errors.name = 'Lütfen ad ve soyadınızı belirtin (en az 2 karakter).' } if (!form.email.trim() || !EMAIL_REGEX.test(form.email.trim())) { errors.email = 'Lütfen geçerli bir e-posta adresi girin.' } setFieldErrors(errors) return Object.keys(errors).length === 0 } const handleBlur = (field: string) => () => { setTouched(prev => ({ ...prev, [field]: true })) validate() } const set = (k: keyof typeof form) => (e: React.ChangeEvent) => { const value = e.target.value setForm(p => ({ ...p, [k]: value })) if (fieldErrors[k]) { setFieldErrors(prev => ({ ...prev, [k]: '' })) } } const resetForm = () => { setForm({ name: '', org: '', email: '', phone: '', _hp: '' }) setTouched({}) setFieldErrors({}) setState('idle') setErrorMessage('') } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setTouched({ name: true, org: true, email: true, phone: true }) if (form._hp) return if (!validate()) { return } setState('loading') setErrorMessage('') try { const res = await fetch('/api/contact', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: form.name.trim(), email: form.email.trim(), org: form.org.trim(), phone: form.phone.trim(), _hp: form._hp, }), }) const data = await res.json().catch(() => ({})) if (res.ok && data.success) { setState('success') } else { setState('error') setErrorMessage(data.error || 'Talep iletilirken bir sorun oluştu. Lütfen tekrar deneyin.') } } catch { setState('error') setErrorMessage('Bağlantı hatası oluştu. Lütfen internet bağlantınızı kontrol edip tekrar deneyin.') } } if (state === 'success') { return (

Demo Talebiniz Alındı

Kurucu ekibimiz 24 saat içinde sizinle iletişime geçerek 15 dakikalık birebir canlı demo oturumunuzu planlayacaktır.

) } const baseInput = 'w-full min-h-[46px] rounded-xl border bg-white px-4 py-2.5 text-sm text-zinc-900 placeholder:text-zinc-400 outline-none transition-all' return (
{fieldErrors.name && touched.name && (

)}
{fieldErrors.email && touched.email && (

)}
{state === 'error' && (
)}
) }