"use client"; import Cookies from "js-cookie"; import type React from "react"; import { useState, useEffect } from "react"; import Link from "next/link"; import { useRouter, usePathname } from "next/navigation"; import { api } from "@/services/api.mjs"; // Importando nosso cliente de API 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 { Search, Bell, User, LogOut, FileText, Clock, Calendar, Home, ChevronLeft, ChevronRight, } from "lucide-react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; interface PatientData { name: string; email: string; phone: string; cpf: string; birthDate: string; address: string; } interface PatientLayoutProps { children: React.ReactNode; } // --- ALTERAÇÃO 1: Renomeando o componente para maior clareza --- export default function PatientLayout({ children }: PatientLayoutProps) { const [patientData, setPatientData] = useState(null); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); const [showLogoutDialog, setShowLogoutDialog] = useState(false); const router = useRouter(); const pathname = usePathname(); useEffect(() => { const handleResize = () => { if (window.innerWidth < 1024) { setSidebarCollapsed(true); } else { setSidebarCollapsed(false); } }; handleResize(); window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, []); useEffect(() => { const userInfoString = localStorage.getItem("user_info"); // --- ALTERAÇÃO 2: Buscando o token no localStorage --- const token = localStorage.getItem("token"); if (userInfoString && token) { const userInfo = JSON.parse(userInfoString); setPatientData({ name: userInfo.user_metadata?.full_name || "Paciente", email: userInfo.email || "", phone: userInfo.phone || "", cpf: "", birthDate: "", address: "", }); } else { // --- ALTERAÇÃO 3: Redirecionando para o login central --- router.push("/login"); } }, [router]); const handleLogout = () => setShowLogoutDialog(true); // --- ALTERAÇÃO 4: Função de logout completa e padronizada --- const confirmLogout = async () => { try { // Chama a função centralizada para fazer o logout no servidor await api.logout(); } catch (error) { console.error("Erro ao tentar fazer logout no servidor:", error); } finally { // Limpeza completa e consistente do estado local localStorage.removeItem("user_info"); localStorage.removeItem("token"); Cookies.remove("access_token"); // Limpeza de segurança setShowLogoutDialog(false); router.push("/"); // Redireciona para a página inicial } }; const cancelLogout = () => setShowLogoutDialog(false); const menuItems = [ { href: "/patient/dashboard", icon: Home, label: "Dashboard" }, { href: "/patient/appointments", icon: Calendar, label: "Minhas Consultas", }, { href: "/patient/schedule", icon: Clock, label: "Agendar Consulta" }, { href: "/patient/reports", icon: FileText, label: "Meus Laudos" }, { href: "/patient/profile", icon: User, label: "Meus Dados" }, ]; if (!patientData) { return (
Carregando...
); } return (
{/* Sidebar */}
{/* Header da Sidebar */}
{!sidebarCollapsed && (
MediConnect
)}
{/* Menu */} {/* Rodapé com Avatar e Logout */}
{patientData.name .split(" ") .map((n) => n[0]) .join("")} {!sidebarCollapsed && (

{patientData.name}

{patientData.email}

)}
{/* Botão Sair - ajustado para responsividade */}
{/* Main Content */}
{/* Header */}
{/* Page Content */}
{children}
{/* Logout confirmation dialog */} Confirmar Saída Deseja realmente sair do sistema? Você precisará fazer login novamente para acessar sua conta.
); }