import { useState } from 'react'; import { API_BASE, type NewsletterSectionPayload } from '../types'; interface DynamicNewsletterProps { payload: NewsletterSectionPayload; } export default function DynamicNewsletter({ payload }: DynamicNewsletterProps) { const { title, description, buttonText = 'Subscribe', placeholderText = 'Enter your email address', showPrivacyCheckbox = true, privacyText = 'I agree to the privacy policy.' } = payload; const [email, setEmail] = useState(''); const [agreed, setAgreed] = useState(!showPrivacyCheckbox); const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle'); const [errorMessage, setErrorMessage] = useState(''); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (showPrivacyCheckbox && !agreed) { alert('Please agree to the privacy policy.'); return; } setStatus('submitting'); try { const res = await fetch(`${API_BASE}/pages/newsletter`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email }) }); if (res.ok) { setStatus('success'); setEmail(''); } else { const errData = await res.json(); setErrorMessage(errData.error || 'Failed to subscribe.'); setStatus('error'); } } catch (err) { console.error('Newsletter submission error:', err); setErrorMessage('Network error. Please try again.'); setStatus('error'); } }; return (
{/* Background decorations for luxury aesthetic */}

{title || "Begin Your Wellness Journey"}

{description}

{status === 'success' ? (

Thank You for Subscribing

You have successfully joined our newsletter list. We will send you exclusive sensory privileges soon.

) : (
setEmail(e.target.value)} className="flex-1 px-6 py-4 bg-white/5 border border-white/10 rounded-full text-white placeholder-white/40 focus:outline-none focus:border-spa-gold text-sm transition-all" />
{status === 'error' && (

{errorMessage}

)} {showPrivacyCheckbox && ( )}
)}
); }