"use client"; import { useState, useEffect, useRef } from "react"; import { useAuth } from "@/context/AuthContext"; import { useTranslation } from "@/context/I18nContext"; import { cmsApi, getImageUrl } from "@/lib/api"; import { Save, Shield, Mail, User as UserIcon, Building, Camera, Languages, FileText, LogOut, Trash2 } from "lucide-react"; import Image from "next/image"; import PageLayout from "@/components/PageLayout"; export default function ProfilePage() { const { t, setLanguage: setContextLanguage } = useTranslation(); const { user, logout } = useAuth(); const [fullName, setFullName] = useState(user?.full_name || ""); const [email, setEmail] = useState(user?.email || ""); const [bio, setBio] = useState(user?.bio || ""); const [language, setLanguage] = useState(user?.language || "en"); const [avatarUrl, setAvatarUrl] = useState(user?.avatar_url || ""); const [saving, setSaving] = useState(false); const [uploading, setUploading] = useState(false); const [message, setMessage] = useState<{ type: 'success' | 'error', text: string } | null>(null); const fileInputRef = useRef(null); useEffect(() => { if (user) { setFullName(user.full_name); setEmail(user.email); setBio(user.bio || ""); setLanguage(user.language || "en"); setAvatarUrl(user.avatar_url || ""); } }, [user]); const handleAvatarUpload = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file || !user) return; try { setUploading(true); const res = await cmsApi.uploadAsset(file); setAvatarUrl(res.url); // Auto-save the new avatar URL await cmsApi.updateUser(user.id, { avatar_url: res.url }); setMessage({ type: 'success', text: 'Avatar updated successfully!' }); } catch (err) { console.error(err); setMessage({ type: 'error', text: 'Failed to upload avatar.' }); } finally { setUploading(false); } }; const handleSave = async (e: React.FormEvent) => { e.preventDefault(); if (!user) return; try { setSaving(true); setMessage(null); await cmsApi.updateUser(user.id, { full_name: fullName, bio, language, avatar_url: avatarUrl }); setContextLanguage(language); setMessage({ type: 'success', text: t('common.save') + '!' }); } catch (err) { console.error(err); setMessage({ type: 'error', text: 'Failed to update profile.' }); } finally { setSaving(false); } }; if (!user) return null; return (
{/* Left Column: Profile Card */}
{/* Avatar Section */}
{avatarUrl ? ( {fullName} ) : ( {fullName.charAt(0)} )} {uploading && (
)}

{fullName}

{user.role}

Organization

{user.organization_id}

Access Level

{user.role}

{/* Right Column: Settings Form */}
setFullName(e.target.value)} className="w-full bg-slate-50 dark:bg-black/40 border border-slate-200 dark:border-white/10 rounded-2xl px-6 py-4 text-slate-900 dark:text-white placeholder-slate-400 focus:outline-none focus:border-blue-500/50 focus:ring-4 focus:ring-blue-500/10 transition-all outline-none" placeholder="Enter your full name" required />