"use client"; import { useAuth } from "@/contexts/AuthContext"; import { usePathname, useRouter } from "next/navigation"; import { useState, useEffect } from "react"; import { UserRole } from "@/types/auth"; import { UserRoundCog, Rocket, Crown } from "lucide-react"; import Header from "@/components/Header"; import { useDashboardData } from "@/hooks/useDashboardData"; import { CadastroSuperadminModal } from "./components"; const Dashboard = () => { const { user: authUser, userRole, isAuthenticated } = useAuth(); const router = useRouter(); const pathname = usePathname(); const [loading, setLoading] = useState(true); const [showCadastroSuperadminModal, setShowCadastroSuperadminModal] = useState(false); // Estado para controlar exibição rápida das ações const [showQuickActions, setShowQuickActions] = useState(false); // Estados para controle do registro completo const [registroIncompleto, setRegistroIncompleto] = useState(false); const [userData, setUserData] = useState(null); const debugLog = (icon: string, message: string, payload?: unknown) => { if (payload !== undefined) { console.log(`[Dashboard] ${icon} ${message}`, payload); return; } console.log(`[Dashboard] ${icon} ${message}`); }; const navigateWithDebug = (target: string, source: string) => { const token = localStorage.getItem("access_token"); debugLog("🧭", `Navegacao solicitada por '${source}'`, { from: pathname, to: target, hasToken: Boolean(token), userRole, isAuthenticated, userLevel: userData?.nivel, isSuperadmin: userData?.superadmin, }); router.push(target); }; // Obter ID da empresa do usuário (se não for superadmin) const empresaId = (authUser as any)?.empresas?.[0] || null; // Hook para buscar dados reais do dashboard const { stats, atividades, pedidosPendentes, loading: dashboardLoading, error: dashboardError, } = useDashboardData({ userRole: userRole || "", empresaId: empresaId || undefined, }); useEffect(() => { debugLog("📍", "Rota atual alterada", { pathname }); }, [pathname]); // Verificar autenticação simples useEffect(() => { const checkAuth = async () => { try { // Verificar se há token armazenado const storedToken = localStorage.getItem('access_token'); debugLog("🔐", "Validando sessao do dashboard", { hasToken: Boolean(storedToken), pathname }); if (!storedToken) { debugLog("⛔", "Token ausente. Redirecionando para login"); navigateWithDebug("/login", "checkAuth:no-token"); return; } // Buscar dados do usuário da API const authMeUrl = `${process.env.NEXT_PUBLIC_BFF_API_URL}/auth/me`; debugLog("📡", "Consultando auth/me", { authMeUrl }); const response = await fetch(authMeUrl, { method: "GET", headers: { "accept": "application/json", "Authorization": `Bearer ${storedToken}`, }, }); debugLog("📨", "Resposta de auth/me", { status: response.status, ok: response.ok }); if (response.ok) { const userData = await response.json(); setUserData(userData); debugLog("✅", "Usuario carregado para dashboard", { id: userData?.id, nivel: userData?.nivel, superadmin: userData?.superadmin, }); // Verificar se registro-completo é false if (userData["registro-completo"] === false) { setRegistroIncompleto(true); } } else { localStorage.removeItem('access_token'); debugLog("⛔", "auth/me nao autorizado. Limpando token e redirecionando"); navigateWithDebug("/login", "checkAuth:invalid-token"); return; } setShowQuickActions(true); } catch (error) { console.error("Erro ao verificar autenticação:", error); navigateWithDebug("/login", "checkAuth:exception"); } finally { setLoading(false); } }; checkAuth(); }, [pathname]); // Funções para lidar com o banner de registro completo const handleCompletarCadastro = () => { setRegistroIncompleto(false); navigateWithDebug("/completar-registro", "banner:completar-cadastro"); }; const handleFecharBanner = () => { setRegistroIncompleto(false); }; // Se ainda está carregando, mostrar loading if (loading) { return (

Carregando...

); } return (
{/* Header unificado */}
{/* Conteúdo principal com espaçamento adequado */}
{/* Seção de boas-vindas */}

Bem-vindo,{" "} {userData?.nome || userData?.["nome-civil"] || userData?.["nome-social"] || authUser?.["nome-civil"] || authUser?.["nome-social"] || "Usuário"} {userRole === UserRole.SUPERADMIN && " (Super Admin)"} {userRole === UserRole.ADMIN && " (Admin)"} {userRole === UserRole.COLABORADOR && " (Colaborador)"}

Gerencie seus medicamentos próximos ao vencimento e conecte-se com outras farmácias. {userRole === UserRole.COLABORADOR && " Acesse suas entregas através do menu."}

{/* Banner de Registro Incompleto */} {registroIncompleto && (

🚀 Complete seu cadastro

Seu cadastro ainda não está completo. Para ter acesso a todas as funcionalidades da plataforma SaveInMed, você precisa finalizar seu registro com algumas informações adicionais.

)} {/* Cards de estatísticas B2B - Ocultos para usuários ADMIN */} {(userRole === UserRole.SUPERADMIN || userRole === UserRole.COLABORADOR) && stats && (
{/* Medicamentos Disponíveis */}

Medicamentos Disponíveis

{stats.medicamentosDisponiveis}

{stats.medicamentosVencimento} {" "} próximos ao vencimento

{/* Pedidos Recebidos - Apenas para SUPERADMIN */} {userRole === UserRole.SUPERADMIN && (

Pedidos Recebidos

{stats.pedidosRecebidos}

{stats.pedidosPendentes} {" "} pendentes

)} {/* Vendas do Mês - Apenas para SUPERADMIN */} {userRole === UserRole.SUPERADMIN && (

Vendas do Mês

{stats.vendasMes}

+{stats.crescimentoVendas}% {" "} vs mês anterior

)} {/* Economia Gerada - Apenas para SUPERADMIN */} {userRole === UserRole.SUPERADMIN && (

Economia Gerada

R$ {stats.economiaGerada.toLocaleString()}

Recuperação de investimento

)}
)} {/* Seções do Dashboard - Layout Responsivo */} {(userRole === UserRole.SUPERADMIN || userRole === UserRole.ADMIN) && (
{/* Atividade Recente */}

Atividade Recente{" "} {userRole === UserRole.SUPERADMIN ? "Global" : "da Empresa"}

{dashboardLoading ? (
) : atividades.length > 0 ? (
{atividades.map((atividade) => (

{atividade.titulo}

{new Date(atividade.data).toLocaleDateString("pt-BR")}{" "} - {atividade.descricao}

{atividade.status === "novo" ? "Novo" : atividade.status === "atualizado" ? "Atualizado" : atividade.status}
))}
) : (

Nenhuma atividade recente encontrada

)}
{/* Pedidos Pendentes */}

Pedidos Pendentes

{dashboardLoading ? (
) : pedidosPendentes.length > 0 ? (
{pedidosPendentes.map((pedido) => (

{pedido.numero}

R$ {pedido.valor.toFixed(2)} - {pedido.comprador}

{pedido.status}
))}
) : (

Nenhum pedido pendente encontrado

)}
)} {/* Indicador de erro se houver */} {dashboardError && (

⚠️ Erro ao carregar dados do dashboard: {dashboardError}

)} {/* 🚀 Seção de Ações Rápidas - Carregamento rápido para melhor UX */} {showQuickActions && (

Ações Rápidas

{/* Gestão de Empresas */} { event.preventDefault(); navigateWithDebug("/dashboard/empresa-novo", "quick-action:gestao-empresas"); }} className="bg-white hover:bg-gray-50 border border-gray-200 rounded-xl p-6 text-center transition-colors duration-200 cursor-pointer group min-h-[48px] block" >

🏢 Gestão de Empresas

Listar e gerenciar empresas

{/* Gestão de Produtos Venda - Oculto para colaborador */} {/* Produtos Venda */} {/* Cadastrar Medicamento */} {/* Catálogo de Produtos - Oculto para colaborador e admin (não superadmin) */} {userData?.nivel !== "colaborador" && !(userData?.nivel === "admin" && userData?.superadmin === false) && ( )} {/* Usuários Pendentes - Apenas para superadmins */} {userData?.superadmin === true && ( )} {/* Cadastrar Superadmin - Apenas para superadmins */} {userData?.superadmin === true && ( )} {/* Entregas - Visível para todos os roles */} {/* Gestão de Pedidos - Oculto para colaborador */} {userData?.nivel !== "colaborador" && ( )} {/* Relatórios - Oculto para colaborador */} {userData?.nivel !== "colaborador" && ( )} {/* Gestão de Usuários - Oculto para colaborador e admin (não superadmin) */} {userData?.nivel !== "colaborador" && !(userData?.nivel === "admin" && userData?.superadmin === false) && ( )} {/* Gestão de Colaboradores - Oculto para colaborador */} {userData?.nivel !== "colaborador" && ( )} {/* Gestão de Laboratórios - Oculto para colaborador e admin (não superadmin) */} {userData?.nivel !== "colaborador" && !(userData?.nivel === "admin" && userData?.superadmin === false) && ( )}
)}
{/* Modal de Cadastro de Superadmin */} setShowCadastroSuperadminModal(false)} onSuccess={() => { setShowCadastroSuperadminModal(false); }} />
); }; export default Dashboard;