"use client"; import type React from "react"; import { useState, useEffect } from "react"; import { useRouter, usePathname } from "next/navigation"; import Link from "next/link"; import Cookies from "js-cookie"; // Manteremos para o logout, se necessário import { api } from "@/services/api.mjs"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Search, Bell, Calendar, Clock, User, LogOut, Menu, X, Home, FileText, ChevronLeft, ChevronRight, } from "lucide-react"; interface DoctorData { id: string; name: string; email: string; phone: string; cpf: string; crm: string; specialty: string; department: string; permissions: object; } interface PatientLayoutProps { children: React.ReactNode; } export default function DoctorLayout({ children }: PatientLayoutProps) { const [doctorData, setDoctorData] = useState(null); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); const [showLogoutDialog, setShowLogoutDialog] = useState(false); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [windowWidth, setWindowWidth] = useState(0); const isMobile = windowWidth < 1024; const router = useRouter(); const pathname = usePathname(); useEffect(() => { const userInfoString = localStorage.getItem("user_info"); // --- ALTERAÇÃO PRINCIPAL AQUI --- // Procurando o token no localStorage, onde ele foi realmente salvo. const token = localStorage.getItem("token"); if (userInfoString && token) { const userInfo = JSON.parse(userInfoString); setDoctorData({ id: userInfo.id || "", name: userInfo.user_metadata?.full_name || "Doutor(a)", email: userInfo.email || "", specialty: userInfo.user_metadata?.specialty || "Especialidade", phone: userInfo.phone || "", cpf: "", crm: "", department: "", permissions: {}, }); } else { // Se não encontrar, aí sim redireciona. router.push("/login"); } }, [router]); // O restante do seu código permanece exatamente o mesmo... useEffect(() => { const handleResize = () => setWindowWidth(window.innerWidth); handleResize(); window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, []); useEffect(() => { if (isMobile) { setSidebarCollapsed(true); } else { setSidebarCollapsed(false); } }, [isMobile]); const handleLogout = () => { setShowLogoutDialog(true); }; // --- ALTERAÇÃO 2: A função de logout agora é MUITO mais simples --- const confirmLogout = async () => { try { // Chama a função centralizada para fazer o logout no servidor await api.logout(); } catch (error) { // O erro já é logado dentro da função api.logout, não precisamos fazer nada aqui } finally { // A responsabilidade do componente é apenas limpar o estado local e redirecionar localStorage.removeItem("user_info"); localStorage.removeItem("token"); Cookies.remove("access_token"); // Limpeza de segurança setShowLogoutDialog(false); router.push("/"); // Redireciona para a home } }; const cancelLogout = () => { setShowLogoutDialog(false); }; const toggleMobileMenu = () => { setIsMobileMenuOpen(!isMobileMenuOpen); }; const menuItems = [ { href: "/doctor/dashboard", icon: Home, label: "Dashboard", // Botão para o dashboard do médico }, { href: "/doctor/consultas", icon: Calendar, label: "Consultas", // Botão para página de consultas marcadas do médico atual }, { href: "/doctor/medicos", icon: User, label: "Pacientes", // Botão para a página de visualização de todos os pacientes }, { href: "/doctor/disponibilidade", icon: Calendar, label: "Disponibilidade", // Botão para o dashboard do médico }, ]; if (!doctorData) { return
Carregando...
; } return ( // O restante do seu código JSX permanece exatamente o mesmo
{!sidebarCollapsed && (
MediConnect
)}
// ... (seu código anterior) {/* Sidebar para desktop */}
{!sidebarCollapsed && (
MediConnect
)}
{!sidebarCollapsed && ( <> {doctorData.name .split(" ") .map((n) => n[0]) .join("")}

{doctorData.name}

{doctorData.specialty}

)} {sidebarCollapsed && ( {doctorData.name .split(" ") .map((n) => n[0]) .join("")} )}
{!sidebarCollapsed && Sair}
{isMobileMenuOpen && (
)}
Hospital System
{doctorData.name .split(" ") .map((n) => n[0]) .join("")}

{doctorData.name}

{doctorData.specialty}

{children}
Confirmar Saída Deseja realmente sair do sistema? Você precisará fazer login novamente para acessar sua conta.
); }