'use client'; import { useEffect, useState } from 'react'; import { useI18n } from '../../components/I18nProvider'; type SiteSettings = { requireLoginForContactDetails: boolean; }; export default function AdminSettingsPage() { const { t } = useI18n(); const [settings, setSettings] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [message, setMessage] = useState(null); const [isAdmin, setIsAdmin] = useState(false); useEffect(() => { async function load() { setLoading(true); setError(null); try { const meRes = await fetch('/api/auth/me', { cache: 'no-store' }); const me = await meRes.json(); if (me.user?.role !== 'ADMIN') { setError(t('adminRequired')); setLoading(false); return; } setIsAdmin(true); const res = await fetch('/api/admin/settings', { cache: 'no-store' }); const data = await res.json(); if (!res.ok) { setError(data.error || 'Failed to load settings'); } else { setSettings(data.settings); } } catch (err) { console.error(err); setError('Failed to load settings'); } finally { setLoading(false); } } load(); }, [t]); async function save(next: Partial) { if (!isAdmin) return; setSaving(true); setMessage(null); setError(null); try { const res = await fetch('/api/admin/settings', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(next), }); const data = await res.json(); if (!res.ok) { setError(data.error || 'Failed to save settings'); } else { setSettings(data.settings); setMessage(t('settingsSaved')); } } catch (err) { console.error(err); setError('Failed to save settings'); } finally { setSaving(false); } } function toggleRequireLoginForContactDetails() { if (!settings) return; save({ requireLoginForContactDetails: !settings.requireLoginForContactDetails }); } return (

{t('adminSettingsTitle')}

{t('adminSettingsLead')}

{loading ?

{t('loading')}

: null} {message ?

{message}

: null} {error ?

{error}

: null} {!loading && settings ? (

{t('settingContactVisibilityTitle')}

{t('settingContactVisibilityHelp')}

) : null}
); }