"use client" import type React from "react" import { useState, useEffect } from "react" import Link from "next/link" import { useRouter, usePathname } from "next/navigation" import { Button } from "@/components/ui/button" import Cookies from "js-cookie" 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 HospitalLayoutProps { children: React.ReactNode } export default function HospitalLayout({ children }: HospitalLayoutProps) { const [patientData, setPatientData] = useState(null) const [sidebarCollapsed, setSidebarCollapsed] = useState(false) const [showLogoutDialog, setShowLogoutDialog] = useState(false) const router = useRouter() const pathname = usePathname() // 🔹 Ajuste automático no resize useEffect(() => { const handleResize = () => { if (window.innerWidth < 1024) { setSidebarCollapsed(true) // colapsa no mobile } else { setSidebarCollapsed(false) // expande no desktop } } handleResize() window.addEventListener("resize", handleResize) return () => window.removeEventListener("resize", handleResize) }, []) useEffect(() => { // 1. Procuramos pela chave correta: 'user_info' const userInfoString = localStorage.getItem("user_info"); // 2. Para mais segurança, verificamos também se o token de acesso existe no cookie const token = Cookies.get("access_token"); if (userInfoString && token) { const userInfo = JSON.parse(userInfoString); // 3. Adaptamos os dados para a estrutura que seu layout espera (PatientData) // Usamos os dados do objeto 'user' que a API do Supabase nos deu setPatientData({ name: userInfo.user_metadata?.full_name || "Paciente", email: userInfo.email || "", // Os campos abaixo não vêm do login, então os deixamos vazios por enquanto phone: userInfo.phone || "", cpf: "", birthDate: "", address: "", }); } else { // Se as informações do usuário ou o token não forem encontrados, mandamos para o login. router.push("/patient/login"); } }, [router]); const handleLogout = () => setShowLogoutDialog(true) const confirmLogout = () => { localStorage.removeItem("patientData") setShowLogoutDialog(false) router.push("/") } 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 && (
MedConnect
)}
{/* 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.
) }