'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { Eye, EyeOff, Zap, Layout } from 'lucide-react' import { loginWithPassword, signUpWithPassword, updateInterfacePreference, type InterfacePreference } from '@/lib/auth/client' export function LoginForm() { const router = useRouter() const [mode, setMode] = useState<'login' | 'signup'>('login') const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [loading, setLoading] = useState(false) const [showPassword, setShowPassword] = useState(false) const [showConfirmPassword, setShowConfirmPassword] = useState(false) const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null) const [interfacePreference, setInterfacePreference] = useState('cortex') // Redirect path based on interface preference const getRedirectPath = () => { return interfacePreference === 'cortex' ? '/epd/cortex' : '/epd/patients' } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setLoading(true) setMessage(null) try { if (mode === 'signup') { if (password !== confirmPassword) { throw new Error('Wachtwoorden komen niet overeen') } const result = await signUpWithPassword(email, password) if (result.session) { // Save interface preference after successful signup await updateInterfacePreference(interfacePreference) setMessage({ type: 'success', text: 'Account aangemaakt! Je wordt doorgestuurd...' }) setTimeout(() => { router.push(getRedirectPath()) }, 1000) } else { setMessage({ type: 'success', text: 'Check je inbox voor een verificatie link om je account te activeren.' }) } } else { await loginWithPassword(email, password) // Save interface preference after successful login await updateInterfacePreference(interfacePreference) setMessage({ type: 'success', text: 'Ingelogd! Je wordt doorgestuurd...' }) setTimeout(() => { router.push(getRedirectPath()) }, 1000) } } catch (error: any) { if (error.code === 'user_already_registered' && error.data?.session) { // Save interface preference for auto-logged in user await updateInterfacePreference(interfacePreference) setMessage({ type: 'success', text: 'Dit emailadres bestaat al. Je bent nu ingelogd!' }) setTimeout(() => { router.push(getRedirectPath()) }, 1000) } else if (error.code === 'user_already_registered') { setMessage({ type: 'error', text: error.message || 'Dit emailadres is al geregistreerd. Probeer in te loggen.' }) setTimeout(() => { setMode('login') setPassword('') setConfirmPassword('') }, 2000) } else if (error.code === 'invalid_credentials' && mode === 'login') { setMessage({ type: 'error', text: error.message || 'Email of wachtwoord is onjuist.' }) } else if (error.code === 'email_not_confirmed') { setMessage({ type: 'error', text: error.message || 'Je email is nog niet geverifieerd. Check je inbox.' }) } else { setMessage({ type: 'error', text: error.message || 'Er ging iets mis. Probeer opnieuw.' }) } } finally { setLoading(false) } } const handleQuickDemoLogin = async () => { setMode('login') setEmail('demo@mini-ecd.demo') setPassword('Demo2024!') setLoading(true) try { await loginWithPassword('demo@mini-ecd.demo', 'Demo2024!') // Save interface preference for demo user await updateInterfacePreference(interfacePreference) router.push(getRedirectPath()) } catch (error: any) { setMessage({ type: 'error', text: 'Demo login mislukt. Probeer handmatig in te loggen.' }) setLoading(false) } } return (

{mode === 'login' ? 'Welkom terug' : 'Maak een account'}

{mode === 'login' ? 'Log in om toegang te krijgen tot het EPD' : 'Start vandaag nog met snellere rapportages'}

{/* Interface Selector */}
{message && (

{message.text}

)}
setEmail(e.target.value)} placeholder="jouw@email.nl" required className="w-full px-4 py-2.5 border border-slate-300 rounded-lg focus:ring-2 focus:ring-slate-400 focus:border-slate-400" />
setPassword(e.target.value)} placeholder="••••••••" required minLength={8} className="w-full px-4 py-2.5 pr-11 border border-slate-300 rounded-lg focus:ring-2 focus:ring-slate-400 focus:border-slate-400" />
{mode === 'login' && (
Wachtwoord vergeten?
)}
{mode === 'signup' && (
setConfirmPassword(e.target.value)} placeholder="••••••••" required minLength={8} className="w-full px-4 py-2.5 pr-11 border border-slate-300 rounded-lg focus:ring-2 focus:ring-slate-400 focus:border-slate-400" />
)}
of

Build in Public door{' '} AI Speedrun

) }