import React, { useState, useRef } from 'react'; import { motion } from 'framer-motion'; import { Send, Loader2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useToast } from '@/components/ui/use-toast'; const ContactForm = () => { const { toast } = useToast(); const form = useRef(); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ nombre: '', email: '', telefono: '', empresa: '', asunto: '', mensaje: '' }); const [errors, setErrors] = useState({}); const validateForm = () => { const newErrors = {}; if (!formData.nombre.trim()) newErrors.nombre = 'El nombre es requerido'; if (!formData.email.trim()) newErrors.email = 'El email es requerido'; else if (!/\S+@\S+\.\S+/.test(formData.email)) newErrors.email = 'Email inválido'; if (!formData.telefono.trim()) newErrors.telefono = 'El teléfono es requerido'; if (!formData.asunto.trim()) newErrors.asunto = 'El asunto es requerido'; if (!formData.mensaje.trim()) newErrors.mensaje = 'El mensaje es requerido'; setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); if (errors[name]) setErrors(prev => ({ ...prev, [name]: '' })); }; const handleSubmit = async (e) => { e.preventDefault(); if (!validateForm()) { toast({ title: "Error de validación", description: "Por favor complete todos los campos requeridos.", variant: "destructive" }); return; } setLoading(true); try { await new Promise(resolve => setTimeout(resolve, 1500)); toast({ title: "¡Mensaje enviado!", description: "Gracias por contactarnos. Le responderemos pronto." }); setFormData({ nombre: '', email: '', telefono: '', empresa: '', asunto: '', mensaje: '' }); } catch (error) { toast({ title: "Error", description: "Hubo un problema. Intente de nuevo.", variant: "destructive" }); } finally { setLoading(false); } }; const inputClasses = (error) => `w-full px-4 py-3 bg-blanco border ${error ? 'border-red-500' : 'border-azulClaro'} rounded-lg text-azulOscuro placeholder-grisMedio focus:outline-none focus:ring-2 focus:ring-azulClaro focus:border-azulPrincipal transition-colors`; return (
{errors.nombre &&

{errors.nombre}

}
{errors.email &&

{errors.email}

}
{errors.telefono &&

{errors.telefono}

}
{errors.asunto &&

{errors.asunto}

}