import { analytics } from './analytics'; interface EmailData { name: string; email: string; phone?: string; company?: string; message: string; } export function validateEmail(email: string): boolean { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); } export function formatEmailContent(data: EmailData, type: 'contact' | 'offset'): { subject: string, body: string } { const subject = type === 'contact' ? `Contact from ${data.name} - Puffin Offset` : `Offset Request - ${data.name}`; const body = ` Name: ${data.name} Email: ${data.email} Phone: ${data.phone || 'Not provided'} Company: ${data.company || 'Not provided'} Message: ${data.message} `.trim(); return { subject, body }; } export function sendEmail(to: string, subject: string, body: string): void { const mailtoUrl = `mailto:${to}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; window.location.href = mailtoUrl; } export async function sendFormspreeEmail(data: EmailData, type: 'contact' | 'offset'): Promise { const FORMSPREE_CONTACT_ID = 'xkgovnby'; // Contact form const FORMSPREE_OFFSET_ID = 'xvgzbory'; // Offset request form const formId = type === 'contact' ? FORMSPREE_CONTACT_ID : FORMSPREE_OFFSET_ID; try { const response = await fetch(`https://formspree.io/f/${formId}`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ ...data, _subject: type === 'contact' ? `Contact from ${data.name} - Puffin Offset` : `Offset Request - ${data.name}` }), }); if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || 'Failed to send message'); } analytics.event('email', 'sent', type); } catch (error) { analytics.error(error as Error, 'Email sending failed'); throw error; } }