import { useState } from 'react'; import { motion } from 'framer-motion'; import { Mail, Phone, MapPin, Send, Github, Linkedin, MessageCircle, CheckCircle, AlertCircle } from 'lucide-react'; import { sendContactEmail } from '../services/emailService'; import type { ContactFormData } from '../services/emailService'; import { useLanguage } from '../contexts/LanguageContext'; const Contact = () => { const { t } = useLanguage(); const [formData, setFormData] = useState({ name: '', email: '', subject: '', message: '' }); const [isSubmitting, setIsSubmitting] = useState(false); const [isSubmitted, setIsSubmitted] = useState(false); const [error, setError] = useState(null); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); // Vérification du délai de 15 minutes par email const storageKey = `lastMessageTime_${formData.email}`; const lastMessageTime = localStorage.getItem(storageKey); if (lastMessageTime) { const timeSinceLastMessage = Date.now() - parseInt(lastMessageTime, 10); const fifteenMinutes = 15 * 60 * 1000; if (timeSinceLastMessage < fifteenMinutes) { const remainingMinutes = Math.ceil((fifteenMinutes - timeSinceLastMessage) / 60000); setError(`Veuillez attendre ${remainingMinutes} minutes avant d'envoyer un nouveau message avec cette adresse email.`); return; } } setIsSubmitting(true); setError(null); try { const contactData: ContactFormData = { name: formData.name, email: formData.email, subject: formData.subject, message: formData.message }; const result = await sendContactEmail(contactData); if (result.success) { localStorage.setItem(`lastMessageTime_${formData.email}`, Date.now().toString()); setIsSubmitted(true); setFormData({ name: '', email: '', subject: '', message: '' }); // Reset du message de succès après 5 secondes setTimeout(() => { setIsSubmitted(false); }, 5000); } else { setError(result.message); } } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Une erreur est survenue lors de l\'envoi du message.'; setError(errorMessage); console.error('Erreur lors de l\'envoi de l\'email:', err); } finally { setIsSubmitting(false); } }; const contactInfo = [ { icon: , title: "Email", content: "dayronvanleemput@gmail.com", link: "mailto:dayronvanleemput@gmail.com", color: "#EA4335" }, { icon: , title: "Téléphone", content: "+32 455 19 47 62", link: "tel:+32455194762", color: "#34A853" }, { icon: , title: "Localisation", content: "Ath, Belgique", link: "https://maps.google.com/?q=Ath,Belgium", color: "#4285F4" } ]; const socialLinks = [ { icon: , name: "GitHub", url: "https://github.com/Dayron-HELHa", // Remplacez par votre profil color: "#333" }, { icon: , name: "LinkedIn", url: "https://www.linkedin.com/in/dayron-van-leemput-992a94398", // Remplacez par votre profil color: "#0077B5" } ]; const containerVariants = { hidden: { opacity: 0 }, visible: { opacity: 1, transition: { staggerChildren: 0.2, delayChildren: 0.3 } } }; const itemVariants = { hidden: { opacity: 0, y: 50 }, visible: { opacity: 1, y: 0, transition: { duration: 0.6, ease: [0.25, 0.1, 0.25, 1] as const } } }; return (

{t('contact.title')}

{t('contact.subtitle')}

{/* Informations de contact */}

{t('contact.stayInTouch')}

{t('contact.intro')}

{contactInfo.map((contact, index) => (
{contact.icon}

{contact.title}

{contact.content}
))}

{t('contact.findMeOn')}

{socialLinks.map((social, index) => (
{social.icon}
{social.name}
))}
{/* Formulaire de contact */}

{t('contact.sendMessage')}

{isSubmitted && ( {t('contact.success')} )} {error && ( {error} )}