"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"; // <-- 1. IMPORTAÇÃO ADICIONADA 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, User, LogOut, ChevronLeft, ChevronRight, Home, } from "lucide-react"; interface ManagerData { id: string; name: string; email: string; phone: string; cpf: string; department: string; permissions: object; } interface ManagerLayoutProps { // Corrigi o nome da prop aqui children: React.ReactNode; } export default function ManagerLayout({ children }: ManagerLayoutProps) { const [managerData, setManagerData] = useState(null); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); const [showLogoutDialog, setShowLogoutDialog] = useState(false); const router = useRouter(); const pathname = usePathname(); // ================================================================== // 2. BLOCO DE SEGURANÇA CORRIGIDO // ================================================================== useEffect(() => { const userInfoString = localStorage.getItem("user_info"); const token = Cookies.get("access_token"); if (userInfoString && token) { const userInfo = JSON.parse(userInfoString); // 3. "TRADUZIMOS" os dados da API para o formato que o layout espera setManagerData({ id: userInfo.id || "", name: userInfo.user_metadata?.full_name || "Gestor(a)", email: userInfo.email || "", department: userInfo.user_metadata?.role || "Gestão", // Campos que não vêm do login, definidos como vazios para não quebrar phone: userInfo.phone || "", cpf: "", permissions: {}, }); } else { // Se faltar o token ou os dados, volta para o login router.push("/manager/login"); } }, [router]); // 🔥 Responsividade automática da sidebar useEffect(() => { const handleResize = () => { if (window.innerWidth < 1024) { setSidebarCollapsed(true); // colapsa em telas pequenas (lg breakpoint ~ 1024px) } else { setSidebarCollapsed(false); // expande em desktop } }; handleResize(); // roda na primeira carga window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, []); const handleLogout = () => setShowLogoutDialog(true); const confirmLogout = () => { localStorage.removeItem("managerData"); setShowLogoutDialog(false); router.push("/"); }; const cancelLogout = () => setShowLogoutDialog(false); const menuItems = [ { href: "/manager/dashboard/", icon: Home, label: "Dashboard" }, { href: "#", icon: Calendar, label: "Relatórios gerenciais" }, { href: "/manager/usuario/", icon: User, label: "Gestão de Usuários" }, { href: "/manager/home", icon: User, label: "Gestão de Médicos" }, { href: "#", icon: Calendar, label: "Configurações" }, ]; if (!managerData) { return
Carregando...
; } return (
{/* Sidebar */}
{/* Logo + collapse button */}
{!sidebarCollapsed && (
MediConnect
)}
{/* Menu Items */} {/* Perfil no rodapé */}
{managerData.name .split(" ") .map((n) => n[0]) .join("")} {!sidebarCollapsed && (

{managerData.name}

{managerData.department}

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