'use client' import { useState } from 'react' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Textarea } from '@/components/ui/textarea' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Alert, AlertDescription } from '@/components/ui/alert' import { CheckCircle2, Loader2 } from 'lucide-react' const consultingAreas = [ 'اینتگریشن', 'هوشمندسازی', 'RAG', 'Performance', 'امنیت', 'معماری نرم‌افزار', 'داده و تحلیل', 'سایر', ] as const const formSchema = z.object({ fullName: z.string().min(2, 'نام و نام خانوادگی الزامی است'), organization: z.string().min(1, 'نام سازمان الزامی است'), phone: z .string() .min(1, 'شماره تماس الزامی است') .refine( (val) => { const normalized = val .replace(/[۰-۹]/g, (c) => '۰۱۲۳۴۵۶۷۸۹'.indexOf(c).toString()) .replace(/\D/g, '') return normalized.length === 11 && normalized.startsWith('09') }, 'لطفاً شماره موبایل معتبر وارد کنید' ), area: z.string().min(1, 'حوزه مشاوره را انتخاب کنید'), description: z.string().max(1000, 'حداکثر ۱۰۰۰ کاراکتر مجاز است').optional(), }) type FormValues = z.infer export function ConsultingForm() { const [submitted, setSubmitted] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) const [submitError, setSubmitError] = useState(null) const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { fullName: '', organization: '', phone: '', area: '', description: '', }, }) async function onSubmit(data: FormValues) { setSubmitError(null) setIsSubmitting(true) try { const res = await fetch('/api/consulting', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), }) const json = await res.json().catch(() => ({})) if (!res.ok) { setSubmitError(json.error || 'ارسال درخواست ناموفق بود. لطفاً دوباره تلاش کنید.') return } setSubmitted(true) form.reset() } catch { setSubmitError('خطا در ارتباط با سرور. لطفاً دوباره تلاش کنید.') } finally { setIsSubmitting(false) } } if (submitted) { return ( در سریع‌ترین زمان ممکن با شما تماس می‌گیریم. ) } return (
{submitError && ( {submitError} )} ( نام و نام خانوادگی )} /> ( نام سازمان )} /> ( شماره تماس )} /> ( در چه حوزه‌ای مشاوره می‌خواهید؟ )} /> ( توضیحات (اختیاری)