"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { useLanguage } from "@/contexts/LanguageContext"; import { useAuth } from "@/contexts/AuthContext"; import { forgotPassword } from "@/lib/api/auth"; import { ApiError } from "@/lib/api"; import { toast } from "sonner"; type Mode = "login" | "register" | "forgot"; export default function Auth() { const { t } = useLanguage(); const { login, register, logout, user } = useAuth(); const router = useRouter(); const [mode, setMode] = useState("login"); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [name, setName] = useState(""); const [loading, setLoading] = useState(false); useEffect(() => { if (user) router.replace("/"); }, [user, router]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { if (mode === "login") { const profile = await login(email, password); if (profile.role === "admin") { logout(); toast.error(t("auth.admin_not_allowed")); return; } toast.success(t("auth.login_success")); router.push("/"); } else if (mode === "register") { const profile = await register(email, password, name); if (profile) { toast.success(t("auth.register_success")); router.push("/"); } else { toast.success(t("auth.confirm_email")); router.push("/connexion"); } } else { await forgotPassword(email); toast.success(t("auth.forgot_sent")); setMode("login"); setEmail(""); } } catch (err) { const msg = err instanceof ApiError ? err.message : t("auth.error"); toast.error(msg); } finally { setLoading(false); } }; return (

{mode === "login" ? t("auth.login") : mode === "register" ? t("auth.register") : t("auth.forgot_title")}

{mode === "login" ? t("auth.login_subtitle") : mode === "register" ? t("auth.register_subtitle") : t("auth.forgot_subtitle")}

{mode === "register" && (
setName(e.target.value)} className="mt-1" required minLength={2} />
)}
setEmail(e.target.value)} className="mt-1" required />
{mode !== "forgot" && (
{mode === "login" && ( )}
setPassword(e.target.value)} required minLength={8} />
)}
{mode === "forgot" ? (

) : (

{mode === "login" ? t("auth.no_account") : t("auth.has_account")}{" "}

)}
); }