"use client"; import { Suspense, useState, FormEvent, useEffect } from "react"; import { useAuth } from "@/lib/AuthContext"; import { useRouter, useSearchParams } from "next/navigation"; import { Mail, ArrowLeft, Shield } from "lucide-react"; import ErrorFeedback from "@/components/ErrorFeedback"; const getCasdoorUrl = () => { const state = Math.random().toString(36).slice(2, 10); const base = process.env.NEXT_PUBLIC_CASDOOR_SERVER_URL || "https://auth.falahos.my"; const clientId = process.env.NEXT_PUBLIC_CASDOOR_CLIENT_ID || "272f91105da5cf984773"; const redirect = process.env.NEXT_PUBLIC_CASDOOR_REDIRECT_URI || "https://mobile2.falah-os.com/auth/callback"; return `${base}/login/oauth/authorize?client_id=${clientId}&redirect_uri=${encodeURIComponent(redirect)}&response_type=code&scope=openid+profile+email&state=${state}`; }; type AuthMode = "login" | "register"; type PageState = "select" | "email-form"; function AuthPageInner() { const { user, login, register, loading: authLoading } = useAuth(); const router = useRouter(); const searchParams = useSearchParams(); // 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 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); } 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 */}
☪️

Sign in with Ummah ID

Your Ummah ID works across all Falah apps

{/* Sign-in Methods */}
{/* UmmahID OIDC */}
Sign in with UmmahID FalahOS Identity Service
{/* Email */}
); } // ── 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 && ( setError("")} context="authentication" /> )} {/* 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

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