import { useState } from 'react' import { useForm } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' import { useNavigate } from 'react-router-dom' import { useAuth } from '@/context/AuthContext' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Button } from '@/components/ui/button' import { Label } from '@/components/ui/label' import { Alert, AlertDescription } from '@/components/ui/alert' import { AlertCircle, Loader2, Moon, Sun } from 'lucide-react' import { useTheme } from '@/hooks/useTheme' const loginSchema = z.object({ email: z.string().email('Bitte geben Sie eine gueltige E-Mail-Adresse ein'), password: z.string().min(1, 'Passwort ist erforderlich'), mfa_code: z.string().optional(), }) type LoginFormValues = z.infer export function LoginPage() { const { login } = useAuth() const { theme, toggleTheme } = useTheme() const navigate = useNavigate() const [error, setError] = useState(null) const [showMfa, setShowMfa] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(loginSchema), defaultValues: { email: '', password: '', mfa_code: '', }, }) const onSubmit = async (data: LoginFormValues) => { setError(null) setIsSubmitting(true) try { await login({ email: data.email, password: data.password, mfa_code: data.mfa_code || undefined, }) navigate('/dashboard') } catch (err: unknown) { const axiosError = err as { response?: { data?: { detail?: string }; status?: number } } const detail = axiosError.response?.data?.detail || '' if (detail.toLowerCase().includes('mfa') || detail.toLowerCase().includes('2fa')) { setShowMfa(true) setError('Bitte geben Sie Ihren MFA-Code ein') } else if (axiosError.response?.status === 401) { setError('Ungueltige Anmeldedaten') } else if (axiosError.response?.status === 423) { setError('Konto gesperrt. Bitte kontaktieren Sie den Administrator.') } else { setError(detail || 'Ein Fehler ist aufgetreten') } } finally { setIsSubmitting(false) } } return (
DAK Portal Melden Sie sich mit Ihrem Konto an
{error && ( {error} )}
{errors.email && (

{errors.email.message}

)}
{errors.password && (

{errors.password.message}

)}
{showMfa && (
)}
) }