import { useMemo, useState } from 'react'; import { X } from 'lucide-react'; import { useAuth } from '../contexts/AuthContext'; import { useLanguage } from '../contexts/LanguageContext'; interface AuthModalProps { onClose: () => void; mandatory?: boolean; } export default function AuthModal({ onClose, mandatory = false }: AuthModalProps) { const { signIn, signUp, beginGoogleOAuth, authPhase, authError } = useAuth(); const { t } = useLanguage(); const [mode, setMode] = useState<'signin' | 'signup'>('signin'); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [localError, setLocalError] = useState(''); const isBusy = useMemo( () => ['email_signing_in', 'email_signing_up', 'oauth_redirecting', 'oauth_exchanging'].includes(authPhase), [authPhase] ); const submitText = mode === 'signup' ? t.auth.signUp : t.auth.signIn; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLocalError(''); if (mode === 'signup') { if (password.length < 6) { setLocalError(t.auth.passwordHint); return; } if (password !== confirmPassword) { setLocalError(t.auth.passwordMismatch); return; } } const result = mode === 'signup' ? await signUp(email, password) : await signIn(email, password); if (!result.error) { onClose(); } }; const handleGoogleOAuth = async () => { await beginGoogleOAuth(); }; return (

{mode === 'signup' ? t.auth.signUpTitle : t.auth.signInTitle}

{!mandatory && ( )}
setEmail(e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="your@email.com" required disabled={isBusy} /> {mode === 'signup' && (

{t.auth.emailHint}

)}
setPassword(e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="••••••••" required minLength={6} disabled={isBusy} /> {mode === 'signup' && (

{t.auth.passwordHint}

)}
{mode === 'signup' && (
setConfirmPassword(e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="••••••••" required minLength={6} disabled={isBusy} />
)} {(localError || authError) && (
{t.auth.error}: {localError || authError}
)}
); }