"use client"; import { useState, useEffect, FormEvent } from "react"; import { useAuth } from "@/lib/AuthContext"; import { useRouter } from "next/navigation"; import { getUserTier } from "@/lib/tiers"; import { PERSONAS } from "@/lib/personas"; import { User, Crown, Zap, LogOut, ChevronRight, Save, Sparkles, Shield, } from "lucide-react"; const VALID_MADHABS = ["Hanafi", "Maliki", "Shafi'i", "Hanbali"]; export default function ProfilePage() { const { user, token, loading, logout, refreshUser } = useAuth(); const router = useRouter(); // Editable fields const [name, setName] = useState(""); const [preferredName, setPreferredName] = useState(""); const [coachPersona, setCoachPersona] = useState(""); const [madhab, setMadhab] = useState(""); const [coachingGoals, setCoachingGoals] = useState(""); const [saving, setSaving] = useState(false); const [saveMessage, setSaveMessage] = useState(""); useEffect(() => { if (!loading && !token) router.push("/login"); }, [loading, token, router]); useEffect(() => { if (user) { setName(user.name || ""); setPreferredName(user.preferredName || ""); setCoachPersona(user.coachPersona || ""); setMadhab(user.madhab || ""); setCoachingGoals(user.coachingGoals || ""); } }, [user]); const tier = user ? getUserTier(user.isPremium, user.isPro) : "free"; const tierColors = { free: { bg: "bg-gray-900/50", text: "text-gray-400", border: "border-gray-700/50", icon: User }, premium: { bg: "bg-[#D4AF37]/10", text: "text-[#D4AF37]", border: "border-[#D4AF37]/30", icon: Sparkles }, pro: { bg: "bg-purple-900/20", text: "text-purple-400", border: "border-purple-500/30", icon: Crown }, }; const tc = tierColors[tier]; const handleSave = async (e: FormEvent) => { e.preventDefault(); if (!token) return; setSaving(true); setSaveMessage(""); try { const res = await fetch("/api/auth/profile", { method: "PATCH", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, body: JSON.stringify({ name: name.trim() || undefined, preferredName: preferredName.trim() || undefined, coachPersona: coachPersona || undefined, madhab: madhab || undefined, coachingGoals: coachingGoals.trim() || undefined, }), }); if (!res.ok) { const err = await res.json(); throw new Error(err.error || "Save failed"); } setSaveMessage("Profile updated successfully"); await refreshUser(); setTimeout(() => setSaveMessage(""), 3000); } catch (err: unknown) { const message = err instanceof Error ? err.message : "Failed to save profile"; setSaveMessage(message); } finally { setSaving(false); } }; const handleLogout = () => { logout(); router.push("/login"); }; if (loading) { return (
); } if (!user) return null; return (
{/* Header */}

Profile

{/* User Card */}

{user.preferredName || user.name}

{user.email}

{/* Tier Badge */}
{tier === "free" ? "Free" : tier === "premium" ? "Premium" : "Pro"}
{tier === "pro" ? "Unlimited" : `${user.dailyMsgCount}/10 AI today`}
{/* FLH Balance */}
FLH Balance
{user.flhBalance.toLocaleString()}
{/* Edit Profile Form */}

Edit Profile

{saveMessage && (
{saveMessage}
)}
{/* Name */}
setName(e.target.value)} className="w-full bg-[#1a1a24] border border-gray-800/60 rounded-xl px-4 py-3 text-white placeholder-gray-600 focus:outline-none focus:border-[#D4AF37]/50 focus:ring-1 focus:ring-[#D4AF37]/30 transition" />
{/* Preferred Name */}
setPreferredName(e.target.value)} placeholder="How Nur AI should address you" className="w-full bg-[#1a1a24] border border-gray-800/60 rounded-xl px-4 py-3 text-white placeholder-gray-600 focus:outline-none focus:border-[#D4AF37]/50 focus:ring-1 focus:ring-[#D4AF37]/30 transition" />
{/* Coach Persona */}
{/* Madhab */}
{/* Coaching Goals */}