'use client'; import React, { useState } from 'react'; import { useTranslations } from 'next-intl'; import { Input, Textarea, Button } from '@/components/ui'; import { sendContactFormAction } from '@/app/actions/contact'; import { useAnalytics } from '@/components/analytics/useAnalytics'; import { AnalyticsEvents } from '@/components/analytics/analytics-events'; interface RequestQuoteFormProps { productName: string; } export default function RequestQuoteForm({ productName }: RequestQuoteFormProps) { const t = useTranslations('Products.form'); const { trackEvent } = useAnalytics(); const [email, setEmail] = useState(''); const [request, setRequest] = useState(''); const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle'); const [hasStarted, setHasStarted] = useState(false); const handleFocus = (fieldId: string) => { // Initial form start if (!hasStarted) { setHasStarted(true); trackEvent(AnalyticsEvents.FORM_START, { form_id: 'quote_request_form', form_name: 'Product Quote Inquiry', product_name: productName, }); } // Field-level transparency trackEvent(AnalyticsEvents.FORM_FIELD_FOCUS, { form_id: 'quote_request_form', field_id: fieldId, product_name: productName, }); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setStatus('submitting'); const formData = new FormData(); formData.append('name', 'Product Inquiry'); // Default name for product inquiries formData.append('email', email); formData.append('message', request); formData.append('productName', productName); try { const result = await sendContactFormAction(formData); if (result.success) { trackEvent('contact_form_submission', { form_type: 'product_quote', product_name: productName, email: email, }); setStatus('success'); setEmail(''); setRequest(''); } else { trackEvent(AnalyticsEvents.FORM_ERROR, { form_id: 'quote_request_form', product_name: productName, error: result.error || 'submission_failed', }); setStatus('error'); } } catch (error) { console.error('Form submission error:', error); trackEvent(AnalyticsEvents.FORM_ERROR, { form_id: 'quote_request_form', product_name: productName, error: (error as Error).message || 'unexpected_error', }); setStatus('error'); } }; const emailId = React.useId(); const requestId = React.useId(); if (status === 'success') { return (

{t('successTitle')}

{t('successDesc', { productName })}

); } if (status === 'error') { return (

{t('errorTitle') || 'Submission Failed'}

{t('errorDesc') || 'Something went wrong. Please try again.'}

); } return (
{/* Anti-spam Honeypot */}
setEmail(e.target.value)} onFocus={() => handleFocus('quote-email')} placeholder={t('email')} className="h-9 text-xs !mt-0" />