"use client"; import { Suspense, useState, FormEvent, useEffect } from "react"; import { useAuth } from "@/lib/AuthContext"; import { useRouter, useSearchParams } from "next/navigation"; import { Mail, ArrowLeft } from "lucide-react"; type AuthMode = "login" | "register"; type PageState = "select" | "email-form"; /** Inline Google SVG logo */ function GoogleLogo({ className }: { className?: string }) { return ( ); } /** Inline GitHub SVG logo */ function GitHubLogo({ className }: { className?: string }) { return ( ); } function AuthPageInner() { const { user, login, register, oauthLogin, loading: authLoading } = useAuth(); const router = useRouter(); const searchParams = useSearchParams(); const refCode = searchParams.get("ref"); // Redirect to main page if already logged in (e.g. after OAuth popup completes) useEffect(() => { if (user) router.push("/"); }, [user, router]); const [pageState, setPageState] = useState("select"); const [mode, setMode] = useState("register"); const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [submitting, setSubmitting] = useState(false); const handleProviderClick = (provider: string) => { setError(""); oauthLogin(provider); }; const handleEmailClick = () => { setError(""); setPageState("email-form"); }; const toggleMode = () => { setMode((m) => (m === "login" ? "register" : "login")); setError(""); }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setError(""); if (!email.trim() || !password.trim()) { setError("Please fill in all fields"); return; } if (mode === "register" && !name.trim()) { setError("Please enter your name"); return; } if (mode === "register" && password.length < 6) { setError("Password must be at least 6 characters"); return; } setSubmitting(true); try { if (mode === "login") { await login(email.trim(), password); } else { await register(email.trim(), name.trim(), password, refCode || undefined); } router.push("/"); } catch (err: unknown) { const message = err instanceof Error ? err.message : "Something went wrong. Please try again."; setError(message); } finally { setSubmitting(false); } }; // ── Select State ────────────────────────────────────────────────────────── if (pageState === "select") { return (
{/* Logo / Brand */}
☪️

Welcome to Falah

Your Islamic lifestyle companion

{/* SSO Buttons */}
{/* Google */} {/* GitHub */} {/* Divider */}
or
{/* Email */}
{/* Demo Credentials */}

Demo Account

Email:{" "} demo@falahos.my

Password:{" "} password123

); } // ── Email Form State ────────────────────────────────────────────────────── return (
{/* Back button */} {/* Header */}

{mode === "login" ? "Sign In" : "Create Account"}

{mode === "login" ? "Welcome back! Sign in to continue" : "Start your Islamic lifestyle journey"}

{/* Error */} {error && (
{error}
)} {/* Form */}
{/* Name field (register only) */} {mode === "register" && (
setName(e.target.value)} placeholder="Your name" autoComplete="name" className="w-full bg-[#111118] border border-gray-800/60 rounded-xl px-4 py-3.5 text-white placeholder-gray-600 focus:outline-none focus:border-[#D4AF37]/50 focus:ring-1 focus:ring-[#D4AF37]/30 transition text-sm" />
)} {/* Email */}
setEmail(e.target.value)} placeholder="you@example.com" autoComplete="email" autoFocus className="w-full bg-[#111118] border border-gray-800/60 rounded-xl px-4 py-3.5 text-white placeholder-gray-600 focus:outline-none focus:border-[#D4AF37]/50 focus:ring-1 focus:ring-[#D4AF37]/30 transition text-sm" />
{/* Password */}
setPassword(e.target.value)} placeholder={mode === "register" ? "At least 6 characters" : "••••••••"} autoComplete={mode === "login" ? "current-password" : "new-password"} className="w-full bg-[#111118] border border-gray-800/60 rounded-xl px-4 py-3.5 text-white placeholder-gray-600 focus:outline-none focus:border-[#D4AF37]/50 focus:ring-1 focus:ring-[#D4AF37]/30 transition text-sm" />
{/* Submit */}
{/* Toggle mode */}

{mode === "login" ? ( <> Don't have an account?{" "} ) : ( <> Already have an account?{" "} )}

{/* New Member Bonus (register only) */} {mode === "register" && (

New Member Bonus

Get 5,000 FLH{" "} free on sign up + 7-day premium trial {refCode && ( <> {" "}+{" "} 1,000 FLH{" "} referral bonus )}

)} {/* Demo credentials (subtle) */}

Demo:{" "} demo@falahos.my{" "} /{" "} password123

); } export default function AuthPage() { return (
}>
); }