"use client" import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import { AppLayout } from "@/components/app-layout" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Label } from "@/components/ui/label" import { Input } from "@/components/ui/input" import { Button } from "@/components/ui/button" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { toast } from "sonner" import { authService } from "@/lib/api/auth.service" import type { User } from "@/lib/api/types" import { Loader2 } from "lucide-react" export default function PerfilPage() { const router = useRouter() const [user, setUser] = useState(null) const [isLoading, setIsLoading] = useState(true) // Form states const [name, setName] = useState("") const [email, setEmail] = useState("") const [isUpdatingProfile, setIsUpdatingProfile] = useState(false) // Password states const [currentPassword, setCurrentPassword] = useState("") const [newPassword, setNewPassword] = useState("") const [confirmPassword, setConfirmPassword] = useState("") const [isUpdatingPassword, setIsUpdatingPassword] = useState(false) useEffect(() => { const fetchUserData = async () => { try { const response = await authService.getMe() setUser(response.user) setName(response.user.name || "") setEmail(response.user.email) } catch (error) { toast.error("Error al cargar los datos del perfil") router.push("/login") } finally { setIsLoading(false) } } fetchUserData() }, [router]) const handleUpdateProfile = async (e: React.FormEvent) => { e.preventDefault() if (!name || !email) { toast.error("El nombre y correo son obligatorios") return } setIsUpdatingProfile(true) try { const response = await authService.updateProfile({ name, email }) setUser(response.user) toast.success(response.message || "Perfil actualizado correctamente") // Actualizar el user en localstorage para el AppHeader const currentUserStr = localStorage.getItem("user") if (currentUserStr) { const currentUser = JSON.parse(currentUserStr) localStorage.setItem("user", JSON.stringify({ ...currentUser, name: response.user.name, email: response.user.email })) } } catch (error: any) { toast.error(error.message || "Error al actualizar el perfil") } finally { setIsUpdatingProfile(false) } } const handleUpdatePassword = async (e: React.FormEvent) => { e.preventDefault() if (!currentPassword || !newPassword || !confirmPassword) { toast.error("Todos los campos de contraseña son obligatorios") return } if (newPassword !== confirmPassword) { toast.error("La nueva contraseña y la confirmación no coinciden") return } if (newPassword.length < 6) { toast.error("La contraseña debe tener al menos 6 caracteres") return } setIsUpdatingPassword(true) try { const response = await authService.updatePassword({ current_password: currentPassword, password: newPassword, password_confirmation: confirmPassword }) toast.success(response.message || "Contraseña actualizada correctamente") setCurrentPassword("") setNewPassword("") setConfirmPassword("") } catch (error: any) { toast.error(error.message || "Error al actualizar la contraseña") } finally { setIsUpdatingPassword(false) } } const getInitials = (nameStr: string) => { if (!nameStr) return "U" return nameStr .split(" ") .map((n) => n[0]) .join("") .toUpperCase() .slice(0, 2) } if (isLoading) { return (
) } return (

Mi Perfil

Administre su información personal y preferencias

{getInitials(user?.name || "")}

{user?.name}

{user?.rol || "Usuario"}

Información Personal Actualice sus datos de contacto
setName(e.target.value)} required />
setEmail(e.target.value)} required />
Seguridad / Contraseña Cambie su contraseña de acceso
setCurrentPassword(e.target.value)} required />
setNewPassword(e.target.value)} required minLength={6} />
setConfirmPassword(e.target.value)} required minLength={6} />
) }