import { useState, useEffect } from "react"; import { useAuth } from "../../contexts/AuthContext"; import { Usuario } from "../../types/usuario"; import api from "../../services/api"; import { UF_BRASIL } from "../../utils/constants/estados"; export function PerfilPage() { const { user } = useAuth(); const [isEditing, setIsEditing] = useState(false); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState>(user || {}); const [error, setError] = useState(""); const [success, setSuccess] = useState(""); const [senhaForm, setSenhaForm] = useState({ senhaAtual: "", novaSenha: "", confirmarSenha: "", }); const [senhaError, setSenhaError] = useState(""); const [senhaSuccess, setSenhaSuccess] = useState(""); const [loadingSenha, setLoadingSenha] = useState(false); useEffect(() => { const loadProfile = async () => { try { setLoading(true); const response = await api.get(`/usuarios/${user?.id}`); setFormData(response.data); setError(""); } catch (error) { console.error("Erro ao carregar perfil:", error); setError("Erro ao carregar perfil"); } finally { setLoading(false); } }; if (user?.id) { loadProfile(); } }, [user]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(""); setSuccess(""); try { await api.put(`/usuarios/${user?.id}`, formData); setSuccess("Perfil atualizado com sucesso!"); setIsEditing(false); } catch (error) { setError("Erro ao atualizar perfil"); } finally { setLoading(false); } }; const handleChange = (field: string, value: string) => { setFormData((prev) => ({ ...prev, [field]: value })); }; const handleSenhaSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (senhaForm.novaSenha !== senhaForm.confirmarSenha) { setSenhaError("As senhas não coincidem"); return; } setLoadingSenha(true); setSenhaError(""); setSenhaSuccess(""); try { await api.post(`/usuarios/${user?.id}/alterar-senha`, { senhaAtual: senhaForm.senhaAtual, novaSenha: senhaForm.novaSenha, }); setSenhaSuccess("Senha alterada com sucesso!"); setSenhaForm({ senhaAtual: "", novaSenha: "", confirmarSenha: "" }); } catch (error) { setSenhaError("Erro ao alterar senha. Verifique sua senha atual."); } finally { setLoadingSenha(false); } }; return (
{loading ? (
) : (
{/* Cabeçalho */}
{formData.nome?.charAt(0)}

{formData.nome}

{formData.email}

{!isEditing ? ( ) : null}
{/* Alertas */} {error && (
{error}
)} {success && (
{success}
)} {/* Formulário */}
{/* Dados Pessoais */}

Dados Pessoais

handleChange("nome", e.target.value)} disabled={!isEditing} className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-50 disabled:text-gray-500 transition-colors duration-200" />
handleChange("email", e.target.value)} disabled={!isEditing} className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-50 disabled:text-gray-500 transition-colors duration-200" />

O CPF não pode ser alterado

handleChange("rg", e.target.value)} disabled={!isEditing} className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-50 disabled:text-gray-500 transition-colors duration-200" />
{/* Dados Profissionais */}

Dados Profissionais

handleChange("oab", e.target.value)} disabled={!isEditing} className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-50 disabled:text-gray-500 transition-colors duration-200" />
handleChange("telefone", e.target.value) } disabled={!isEditing} className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 disabled:bg-gray-50 disabled:text-gray-500 transition-colors duration-200" placeholder="(00) 00000-0000" />
{/* Botões de ação */} {isEditing && (
)}
)} {/* Formulário de Alteração de Senha */}

Alterar Senha

{senhaError && (
{senhaError}
)} {senhaSuccess && (
{senhaSuccess}
)}
setSenhaForm({ ...senhaForm, senhaAtual: e.target.value }) } required className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
setSenhaForm({ ...senhaForm, novaSenha: e.target.value }) } required className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
setSenhaForm({ ...senhaForm, confirmarSenha: e.target.value }) } required className="w-full px-4 py-2 rounded-lg border border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
); }