import { useState, useEffect } from "react"; import { Save, ArrowLeft } from "lucide-react"; import toast from "react-hot-toast"; import { useNavigate } from "react-router-dom"; import { useAuth } from "../hooks/useAuth"; import { doctorService } from "../services"; import { AvatarUpload } from "../components/ui/AvatarUpload"; export default function PerfilMedico() { const { user } = useAuth(); const navigate = useNavigate(); const [isEditing, setIsEditing] = useState(false); const [loading, setLoading] = useState(true); const [activeTab, setActiveTab] = useState< "personal" | "professional" | "security" >("personal"); const [avatarUrl, setAvatarUrl] = useState(undefined); const [formData, setFormData] = useState({ full_name: "", email: "", phone: "", cpf: "", birth_date: "", gender: "", specialty: "", crm: "", crm_state: "", bio: "", education: "", experience_years: "", }); const [passwordData, setPasswordData] = useState({ currentPassword: "", newPassword: "", confirmPassword: "", }); useEffect(() => { if (user?.id) { loadDoctorData(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [user?.id]); const loadDoctorData = async () => { if (!user?.id) { console.error("[PerfilMedico] Sem user.id:", user); toast.error("Usuário não identificado"); return; } try { setLoading(true); console.log("[PerfilMedico] Buscando dados do médico..."); // Tentar buscar por user_id primeiro let doctor = await doctorService.getByUserId(user.id); // Se não encontrar por user_id, tentar por email if (!doctor && user.email) { console.log( "[PerfilMedico] Médico não encontrado por user_id, tentando por email:", user.email ); doctor = await doctorService.getByEmail(user.email); } if (doctor) { console.log("[PerfilMedico] Dados do médico carregados:", doctor); setFormData({ full_name: doctor.full_name || "", email: doctor.email || "", phone: doctor.phone_mobile || "", cpf: doctor.cpf || "", birth_date: doctor.birth_date || "", gender: "", // Doctor type não tem gender specialty: doctor.specialty || "", crm: doctor.crm || "", crm_state: doctor.crm_uf || "", bio: "", // Doctor type não tem bio education: "", // Doctor type não tem education experience_years: "", // Doctor type não tem experience_years }); setAvatarUrl(undefined); } else { console.warn("[PerfilMedico] Médico não encontrado na tabela doctors"); // Usar dados básicos do usuário logado setFormData({ full_name: user.nome || "", email: user.email || "", phone: "", cpf: "", birth_date: "", gender: "", specialty: "", crm: "", crm_state: "", bio: "", education: "", experience_years: "", }); toast("Preencha seus dados para completar o cadastro", { icon: "ℹ️" }); } } catch (error) { console.error("[PerfilMedico] Erro ao carregar dados do médico:", error); toast.error("Erro ao carregar dados do perfil"); } finally { setLoading(false); } }; const handleSave = async () => { if (!user?.id) return; try { const dataToSave = { ...formData, experience_years: formData.experience_years ? parseInt(formData.experience_years) : undefined, }; await doctorService.update(user.id, dataToSave); toast.success("Perfil atualizado com sucesso!"); setIsEditing(false); } catch (error) { console.error("Erro ao salvar perfil:", error); toast.error("Erro ao salvar perfil"); } }; const handleChange = (field: string, value: string) => { setFormData((prev) => ({ ...prev, [field]: value })); }; const handlePasswordChange = async () => { if (passwordData.newPassword !== passwordData.confirmPassword) { toast.error("As senhas não coincidem"); return; } if (passwordData.newPassword.length < 6) { toast.error("A senha deve ter pelo menos 6 caracteres"); return; } try { // TODO: Implementar mudança de senha via API toast.success("Senha alterada com sucesso!"); setPasswordData({ currentPassword: "", newPassword: "", confirmPassword: "", }); } catch (error) { console.error("Erro ao alterar senha:", error); toast.error("Erro ao alterar senha"); } }; if (loading) { return (
); } return (
{/* Header */}

Meu Perfil

Gerencie suas informações pessoais e profissionais

{!isEditing ? ( ) : (
)}
{/* Avatar Card */}

Foto de Perfil

setAvatarUrl(url || undefined)} />

{formData.full_name}

{formData.specialty}

CRM: {formData.crm} - {formData.crm_state}

{/* Tabs */}
{/* Tab: Dados Pessoais */} {activeTab === "personal" && (

Informações Pessoais

Mantenha seus dados atualizados

handleChange("full_name", e.target.value) } disabled={!isEditing} className="form-input" />
handleChange("email", e.target.value)} disabled={!isEditing} className="form-input" />
handleChange("phone", e.target.value)} disabled={!isEditing} className="form-input" />
handleChange("birth_date", e.target.value) } disabled={!isEditing} className="form-input" />
)} {/* Tab: Informações Profissionais */} {activeTab === "professional" && (

Informações Profissionais

Dados da sua carreira médica

handleChange("specialty", e.target.value) } disabled={!isEditing} className="form-input" />
handleChange("experience_years", e.target.value) } disabled={!isEditing} min="0" className="form-input" />