/* contact.jsx — Lead capture form (single column, urgency, BANT inline) */
const { useState: useStateC } = React;
function Contact() {
const [sent, setSent] = useStateC(false);
const [form, setForm] = useStateC({
name: '', email: '', phone: '', services: [], budget: '', timeline: '', message: '',
});
const [touched, setTouched] = useStateC({});
// Agregamos el estado para evitar múltiples envíos simultáneos
const [isSubmitting, setIsSubmitting] = useStateC(false);
const upd = (k, v) => setForm(f => ({ ...f, [k]: v }));
const toggle = (v) => setForm(f => ({
...f,
services: f.services.includes(v) ? f.services.filter(x => x !== v) : [...f.services, v],
}));
const requiredOk = form.name.trim() && /\S+@\S+\.\S+/.test(form.email);
const submit = async (e) => {
e.preventDefault();
setTouched({ name: true, email: true });
// Si faltan datos o ya se está enviando, no hacer nada
if (!requiredOk || isSubmitting) return;
setIsSubmitting(true); // Deshabilita el botón y muestra "Enviando..."
// Preparamos los datos para enviar.php
const datos = {
nombre: form.name,
email: form.email,
telefono: form.phone || 'No especificado',
rango: `Presupuesto: ${form.budget || 'No definido'} | Urgencia: ${form.timeline || 'No definido'}`,
objetivo: `Servicios: ${form.services.join(', ') || 'Ninguno'} | Desafío: ${form.message || 'Sin mensaje'}`
};
try {
const response = await fetch('/enviar.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(datos)
});
const result = await response.json();
if (result.status === 'success') {
setSent(true); // ¡Éxito! Muestra la pantalla de confirmación
} else {
alert('Hubo un error al enviar: ' + result.message);
}
} catch (error) {
console.error("Error en la petición:", error);
alert('Hubo un problema de conexión. Inténtalo de nuevo.');
} finally {
setIsSubmitting(false); // Vuelve a habilitar el botón
}
};
const services = [
'Paid Media', 'Estrategia', 'Creatividad', 'Data & Analytics',
'Línea de crédito', 'AI / Automation',
];
return (
Conectá tu estrategia comercial con un plan de marketing ejecutable.>}
sub="Completa el formulario y un partner del equipo se conecta para una primera llamada de 15 minutos sin compromiso."
/>
{/* Left column — value prop + urgency */}
{/* Right column — form */}
{sent ? (
Mensaje recibido.
Un partner del equipo se va a contactar a {form.email} para coordinar la primera llamada.