'use client'; import { useState, type FormEvent } from 'react'; import { useRouter } from 'next/navigation'; import { useI18n } from '@/lib/i18n/I18nProvider'; type Mode = 'login' | 'register'; export default function LoginPage() { const router = useRouter(); const { t } = useI18n(); const [mode, setMode] = useState('login'); const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); async function onSubmit(event: FormEvent) { event.preventDefault(); setLoading(true); setError(null); const endpoint = mode === 'login' ? '/api/auth/login' : '/api/auth/register'; const payload = mode === 'login' ? { email, password } : { name, email, password }; const res = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }); if (res.ok) { router.push('/dashboard'); return; } const data = (await res.json().catch(() => null)) as { error?: { message?: string }; } | null; setError(data?.error?.message ?? t('auth.failed')); setLoading(false); } return (

{mode === 'login' ? t('auth.login') : t('auth.register')}

{mode === 'register' && (
setName(e.target.value)} className="mt-1 w-full rounded border px-3 py-2 dark:border-gray-600 dark:bg-gray-700" required />
)}
setEmail(e.target.value)} className="mt-1 w-full rounded border px-3 py-2 dark:border-gray-600 dark:bg-gray-700" required />
setPassword(e.target.value)} className="mt-1 w-full rounded border px-3 py-2 dark:border-gray-600 dark:bg-gray-700" required minLength={8} />
{error && (

{error}

)}
); }