"use client"; import { useState } from "react"; import { authClient } from "@/lib/auth-client"; import { useRouter } from "next/navigation"; import Link from "next/link"; const socialProviders = [ { id: "google", name: "Google", subtitle: "Platzhalter", icon: "G", }, { id: "apple", name: "Apple", subtitle: "Platzhalter", icon: "", }, ]; export default function SignInPage() { const router = useRouter(); const [identifier, setIdentifier] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [magicLinkMessage, setMagicLinkMessage] = useState(""); const [socialMessage, setSocialMessage] = useState(""); const [loading, setLoading] = useState(false); const [magicLinkLoading, setMagicLinkLoading] = useState(false); const toGermanAuthError = (message?: string) => { if (!message) { return "Anmeldung fehlgeschlagen. Bitte versuche es erneut."; } const normalized = message.toLowerCase(); if (normalized.includes("invalid") || normalized.includes("credentials")) { return "E-Mail/Username oder Passwort ist nicht korrekt."; } if (normalized.includes("verify") || normalized.includes("verification")) { return "Bitte bestätige zuerst deine E-Mail-Adresse."; } if (normalized.includes("username")) { return "Username oder Passwort ist nicht korrekt."; } return "Anmeldung fehlgeschlagen. Bitte prüfe deine Eingaben."; }; const handleSignIn = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setMagicLinkMessage(""); setLoading(true); try { const trimmedIdentifier = identifier.trim(); const isEmailInput = trimmedIdentifier.includes("@"); if (!trimmedIdentifier) { setError("Bitte gib deine E-Mail-Adresse oder deinen Username ein."); return; } const result = isEmailInput ? await authClient.signIn.email({ email: trimmedIdentifier, password, }) : await authClient.signIn.username({ username: trimmedIdentifier, password, }); if (result.error) { setError(toGermanAuthError(result.error.message)); } else { router.push("/dashboard"); } } catch { setError("Ein unerwarteter Fehler ist aufgetreten"); } finally { setLoading(false); } }; const handleMagicLink = async () => { setError(""); setMagicLinkMessage(""); const trimmedIdentifier = identifier.trim(); if (!trimmedIdentifier) { setError("Bitte gib zuerst deine E-Mail-Adresse ein."); return; } if (!trimmedIdentifier.includes("@")) { setError("Magic Link funktioniert nur mit einer E-Mail-Adresse."); return; } setMagicLinkLoading(true); try { const result = await authClient.signIn.magicLink({ email: trimmedIdentifier, callbackURL: "/dashboard", errorCallbackURL: "/auth/sign-in", }); if (result.error) { setError(toGermanAuthError(result.error.message)); } else { setMagicLinkMessage("Magic Link gesendet. Prüfe dein Postfach."); } } catch { setError("Ein unerwarteter Fehler ist aufgetreten"); } finally { setMagicLinkLoading(false); } }; const handleSocialPlaceholder = (provider: string) => { setError(""); setMagicLinkMessage(""); setSocialMessage(`${provider}-Login ist aktuell als Platzhalter eingebunden.`); }; return (

Willkommen zurück 🍋

Melde dich bei LemonSpace an

setIdentifier(e.target.value)} required className="w-full rounded-lg border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary" placeholder="name@beispiel.de oder dein Username" autoCapitalize="none" autoCorrect="off" />
setPassword(e.target.value)} required className="w-full rounded-lg border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary" placeholder="Dein Passwort" />
{error && (

{error}

)}

Oder mit externen Anbietern

{socialProviders.map((provider) => ( ))}
{socialMessage && (

{socialMessage}

)} {magicLinkMessage && (

{magicLinkMessage}

)}

Noch kein Konto?{" "} Registrieren

); }