"use client"; import { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useAuth } from "@/contexts/AuthContext"; import { profileUpdateSchema, ProfileUpdateFormData } from "@/lib/validations"; import { Input } from "@/components/ui/Input"; import Button from "@/components/Button"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/Card"; import { Badge } from "@/components/ui/Badge"; import { userService } from "@/services/user.service"; import toast from "react-hot-toast"; import { useRouter } from "next/navigation"; import { ROUTES } from "@/utils/constants"; import { formatDate } from "@/utils/helpers"; import { Modal } from "@/components/ui/Modal"; export const dynamic = 'force-dynamic'; export default function ProfilePage() { const { user, isAuthenticated, refreshUser, logout } = useAuth(); const router = useRouter(); const [isEditing, setIsEditing] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const [isReady, setIsReady] = useState(false); const [showDeleteModal, setShowDeleteModal] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const { register, handleSubmit, reset, formState: { errors }, } = useForm({ resolver: zodResolver(profileUpdateSchema), defaultValues: { firstName: user?.firstName || "", lastName: user?.lastName || "", phone: user?.phone || "", }, }); useEffect(() => { if (!isAuthenticated || !user) { router.push(ROUTES.LOGIN); } else { setIsReady(true); } }, [isAuthenticated, user, router]); if (!isReady || !user) { return null; } const onSubmit = async (data: ProfileUpdateFormData) => { setIsSubmitting(true); try { await userService.updateProfile(data); await refreshUser(); toast.success("Profil mis à jour avec succès"); setIsEditing(false); } catch (error: any) { toast.error(error.message || "Erreur lors de la mise à jour du profil"); } finally { setIsSubmitting(false); } }; const handleCancel = () => { reset({ firstName: user?.firstName || "", lastName: user?.lastName || "", phone: user?.phone || "", }); setIsEditing(false); }; const handleDeleteAccount = async () => { setIsDeleting(true); try { await userService.archiveAccount(); toast.success("Votre compte a été supprimé avec succès"); logout(); router.push(ROUTES.HOME); } catch (error: any) { toast.error(error.message || "Erreur lors de la suppression du compte"); } finally { setIsDeleting(false); setShowDeleteModal(false); } }; const getRoleBadgeVariant = (role: string) => { switch (role) { case "admin": return "danger"; case "employee": return "warning"; default: return "info"; } }; const getRoleLabel = (role: string) => { switch (role) { case "admin": return "Administrateur"; case "employee": return "Employé"; default: return "Client"; } }; return (

Mon profil

{/* Profile Info Card */}

Informations personnelles

{!isEditing ? (

{user.firstName}

{user.lastName}

{user.email}

{user.phone || "Non renseigné"}

{getRoleLabel(user.role)}
) : (
)}
{/* Account Status Card */}

Statut du compte

{formatDate(user.createdAt)}

{/* Quick Actions Card */}

Actions rapides

{user.role === "CLIENT" && ( <> )} {user.role === "EMPLOYEE" && ( )} {user.role === "ADMIN" && ( )}
{/* Delete Confirmation Modal */} setShowDeleteModal(false)} title="Confirmer la suppression" >

Êtes-vous sûr de vouloir supprimer votre compte ?

Votre compte sera supprimé et vous ne pourrez plus vous connecter. Vos données seront conservées et un administrateur pourra réactiver votre compte si nécessaire.

); }