// Caminho: app/(secretary)/layout.tsx (ou o caminho do seu arquivo) "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"; import { api } from '@/services/api.mjs'; // Importando nosso cliente de API central 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, Home, ChevronLeft, ChevronRight } from "lucide-react" interface SecretaryData { id: string name: string email: string phone: string cpf: string employeeId: string department: string permissions: object } interface SecretaryLayoutProps { children: React.ReactNode } export default function SecretaryLayout({ children }: SecretaryLayoutProps) { const [secretaryData, setSecretaryData] = useState(null); const [sidebarCollapsed, setSidebarCollapsed] = useState(false) const [showLogoutDialog, setShowLogoutDialog] = useState(false) const router = useRouter() const pathname = usePathname() useEffect(() => { const userInfoString = localStorage.getItem("user_info"); // --- ALTERAÇÃO 1: Buscando o token no localStorage --- const token = localStorage.getItem("token"); if (userInfoString && token) { const userInfo = JSON.parse(userInfoString); setSecretaryData({ id: userInfo.id || "", name: userInfo.user_metadata?.full_name || "Secretária", email: userInfo.email || "", department: userInfo.user_metadata?.department || "Atendimento", phone: userInfo.phone || "", cpf: "", employeeId: "", permissions: {}, }); } else { // --- ALTERAÇÃO 2: Redirecionando para o login central --- router.push("/login"); } }, [router]); useEffect(() => { const handleResize = () => { if (window.innerWidth < 1024) { setSidebarCollapsed(true) } else { setSidebarCollapsed(false) } } handleResize() window.addEventListener("resize", handleResize) return () => window.removeEventListener("resize", handleResize) }, []) const handleLogout = () => setShowLogoutDialog(true) // --- ALTERAÇÃO 3: 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: "/secretary/dashboard", icon: Home, label: "Dashboard" }, { href: "/secretary/appointments", icon: Calendar, label: "Consultas" }, { href: "/secretary/schedule", icon: Clock, label: "Agendar Consulta" }, { href: "/secretary/pacientes", icon: User, label: "Pacientes" }, ] if (!secretaryData) { return
Carregando...
; } return (
{/* Sidebar */}
{!sidebarCollapsed && (
MediConnect
)}
{secretaryData.name .split(" ") .map((n) => n[0]) .join("")} {!sidebarCollapsed && (

{secretaryData.name}

{secretaryData.email}

)}
{/* Main Content */}
{children}
{/* Logout confirmation dialog */} Confirmar Saída Deseja realmente sair do sistema? Você precisará fazer login novamente para acessar sua conta.
) }