"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 (
{user.email}