"use client"; import { useState, useEffect, useRef } from "react"; import Link from "next/link"; import Image from "next/image"; import { useRouter } from "next/navigation"; // import { Models } from "appwrite"; // Removido - não usamos mais Appwrite import Navbar from "./Navbar"; // import RegistroIncompletoModal from "./RegistroIncompletoModal"; // Removido - agora é controlado pelo dashboard import CarrinhoCompras from "./CarrinhoCompras"; import LojaVirtualMenu from "./LojaVirtualMenu"; import { useRegistroCompleto } from "@/hooks/useRegistroCompleto"; import { ShoppingCartIcon, XMarkIcon, PlusIcon, MinusIcon, UserIcon, ArrowRightOnRectangleIcon, BuildingOffice2Icon, BellIcon, } from "@heroicons/react/24/outline"; interface HeaderProps { user?: any | null; // Tipo genérico ao invés de Models.User title?: string; subtitle?: string; showBackButton?: boolean; } const Header = ({ user, title = "SaveInMed", subtitle = "Plataforma B2B de Medicamentos", showBackButton = false, }: HeaderProps) => { const router = useRouter(); const [isOpen, setIsOpen] = useState(false); // const [showRegistroModal, setShowRegistroModal] = useState(false); // Removido - agora é controlado pelo dashboard const dropdownRef = useRef(null); const displayUserName = user?.nome || user?.["nome-civil"] || user?.["nome-social"] || user?.name || "Usuário"; const displayCompanyName = user?.company_name || user?.empresa?.["nome-fantasia"] || user?.empresa?.["razao-social"] || user?.empresa?.nomeFantasia || user?.empresa?.razaoSocial || user?.empresaData?.["nome-fantasia"] || user?.empresaData?.["razao-social"] || user?.empresaData?.nomeFantasia || user?.empresaData?.razaoSocial || (Array.isArray(user?.empresas) ? user.empresas[0] : null) || (Array.isArray(user?.empresasDados) ? user.empresasDados[0] : null) || "Empresa não informada"; // Hook para verificar se o registro está completo const { isCompleto, loading, dadosFaltantes } = useRegistroCompleto(user || null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( dropdownRef.current && !dropdownRef.current.contains(event.target as Node) ) { setIsOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, []); // // Verificar se deve mostrar o modal de registro incompleto - REMOVIDO // // Agora essa funcionalidade é controlada pelo dashboard // useEffect(() => { // // Funcionalidade movida para o dashboard // }, [loading, isCompleto, user]); const handleLogout = async () => { try { // 1. Fazer logout no BFF const token = localStorage.getItem('access_token'); if (token) { const response = await fetch(`${process.env.NEXT_PUBLIC_BFF_API_URL}/auth/logout`, { method: 'POST', headers: { 'accept': '*/*', 'Authorization': `Bearer ${token}`, }, }); } // 2. Limpar todos os dados locais localStorage.removeItem("access_token"); localStorage.removeItem("user"); localStorage.removeItem("registro-incompleto-dismissed"); localStorage.removeItem("completar-registro-usuario-id"); // 3. Redirecionar para a página de login router.push("/login"); } catch (error) { console.error("❌ Erro no logout:", error); // Mesmo com erro, limpar dados locais e redirecionar localStorage.clear(); router.push("/login"); } }; return ( <>
{/* Logo e navegação */}
{showBackButton && ( )} SaveInMed Logo

{title}

{subtitle}

{/* Informações do usuário */}
{/* Menu Loja Virtual */} {/* Indicador de cadastro incompleto */} {!loading && !isCompleto && (
Cadastro incompleto
)}
setIsOpen(true)} onMouseLeave={() => setIsOpen(false)} > {isOpen && ( <> {/* Bridge do prevent closing */}
  • Empresa

    {displayCompanyName}

    Perfil do usuário

    {displayUserName}

  • Perfil do usuário
  • Perfil da empresa
  • Meus Pedidos
  • Mensagens
)}
{/* Navbar Mobile - Aparece abaixo do header em telas pequenas */}
{/* Modal de Registro Incompleto Removido - Agora controlado pelo dashboard */} ); }; export default Header;