'use client' import { useState } from 'react' import { CheckCircle } from 'lucide-react' import { getDeviceType, sendWebhookPayload } from '@/lib/webhook' interface WebhookFormProps { formType: 'contact' | 'franchise' | 'membership' title: string successMessage?: string successSubtext?: string submitButtonText?: string fields: { name: string label: string type: 'text' | 'email' | 'tel' | 'textarea' | 'select' required?: boolean placeholder?: string options?: { value: string; label: string }[] rows?: number }[] additionalData?: Record } export function WebhookForm({ formType, title, successMessage = 'Mensaje Enviado', successSubtext = 'Gracias por contactarnos. Te responderemos lo antes posible.', submitButtonText = 'Enviar', fields, additionalData }: WebhookFormProps) { const [isSubmitting, setIsSubmitting] = useState(false) const [submitted, setSubmitted] = useState(false) const [showThankYou, setShowThankYou] = useState(false) const [submitError, setSubmitError] = useState(null) const formData = fields.reduce( (acc, field) => ({ ...acc, [field.name]: '' }), {} as Record ) const [values, setValues] = useState(formData) const handleChange = ( e: React.ChangeEvent ) => { setValues((prev) => ({ ...prev, [e.target.name]: e.target.value })) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsSubmitting(true) setSubmitError(null) const payload = { form: formType, ...values, timestamp_utc: new Date().toISOString(), device_type: getDeviceType(), ...additionalData } try { await sendWebhookPayload(payload) setSubmitted(true) setShowThankYou(true) window.setTimeout(() => setShowThankYou(false), 3500) setValues(formData) } catch (error) { setSubmitError('No pudimos enviar tu solicitud. Intenta de nuevo.') } finally { setIsSubmitting(false) } } return ( <> {showThankYou && (

¡Gracias!

{successSubtext}

)} {submitted ? (

{successMessage}

{successSubtext}

) : (
{fields.map((field) => (
{field.type === 'textarea' ? (