import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useAuth } from '../contexts/AuthContext' import { ApiError } from '../utils/api' interface Props { onClose: () => void onForgotPassword: () => void } type Tab = 'login' | 'register' export default function AuthModal({ onClose, onForgotPassword }: Readonly) { const { t } = useTranslation() const { login, register } = useAuth() const [tab, setTab] = useState('login') const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [displayName, setDisplayName] = useState('') const [error, setError] = useState(null) const [success, setSuccess] = useState(null) const [submitting, setSubmitting] = useState(false) const switchTab = (t: Tab) => { setTab(t) setError(null) setSuccess(null) } const handleLogin = async (e: React.FormEvent) => { e.preventDefault() setError(null) setSubmitting(true) try { await login(email, password) onClose() } catch (err) { setError(err instanceof ApiError ? err.message : t('auth.loginFailed')) } finally { setSubmitting(false) } } const handleRegister = async (e: React.FormEvent) => { e.preventDefault() setError(null) if (password !== confirmPassword) { setError(t('auth.passwordsDoNotMatch')) return } setSubmitting(true) try { const message = await register(email, password, displayName) setSuccess(message) } catch (err) { setError(err instanceof ApiError ? err.message : t('auth.registrationFailed')) } finally { setSubmitting(false) } } return (
e.stopPropagation()}>

{tab === 'login' ? t('auth.welcomeBack') : t('auth.createAccount')}

{tab === 'login' ? t('auth.signInSubtitle') : t('auth.registerSubtitle')}

{error &&
{error}
} {success &&
{success}
} {!success && tab === 'login' && (
void handleLogin(e)} className="auth-form">
setEmail(e.target.value)} placeholder="you@example.com" required autoComplete="email" />
setPassword(e.target.value)} placeholder="••••••••" required autoComplete="current-password" />
)} {!success && tab === 'register' && (
void handleRegister(e)} className="auth-form">
setDisplayName(e.target.value)} placeholder="Your name" required autoComplete="name" />
setEmail(e.target.value)} placeholder="you@example.com" required autoComplete="email" />
setPassword(e.target.value)} placeholder="Min. 8 characters" required minLength={8} autoComplete="new-password" />
setConfirmPassword(e.target.value)} placeholder="••••••••" required minLength={8} autoComplete="new-password" />
)}
) }