'use client' import { Suspense, useEffect, useState } from 'react' import Link from 'next/link' import { useSearchParams } from 'next/navigation' import { CheckCircle2, AlertCircle, Mail } from 'lucide-react' import { useLanguage } from '@/lib/i18n' import { confirmMarketingUnsubscribe, previewUnsubscribeToken } from '@/app/actions/marketing-unsubscribe' function UnsubscribeContent() { const { t } = useLanguage() const searchParams = useSearchParams() const token = searchParams.get('token') || '' const [status, setStatus] = useState<'idle' | 'saving' | 'ok' | 'already' | 'invalid'>( token ? 'idle' : 'invalid', ) useEffect(() => { if (!token) return let cancelled = false void previewUnsubscribeToken(token).then((result) => { if (!cancelled && !result.valid) setStatus('invalid') }) return () => { cancelled = true } }, [token]) const confirm = async () => { if (!token) { setStatus('invalid') return } setStatus('saving') const result = await confirmMarketingUnsubscribe(token) if (result.invalid || !result.ok) setStatus('invalid') else if (result.already) setStatus('already') else setStatus('ok') } if (status === 'ok' || status === 'already') { return (

{t('unsubscribe.successTitle')}

{t('unsubscribe.successBody')}

{t('unsubscribe.backToSignIn')}
) } if (status === 'invalid') { return (

{t('unsubscribe.invalidTitle')}

{t('unsubscribe.invalidBody')}

{t('unsubscribe.openSettings')}
) } return (

{t('unsubscribe.title')}

{t('unsubscribe.body')}

{ e.preventDefault() void confirm() }} className="space-y-3" > {t('unsubscribe.keep')}
) } export default function UnsubscribePage() { return ( ) }