import React, { type ReactNode, useState, useEffect } from 'react'; import { Box, AppBar, Toolbar, Typography, Button, Tabs, Tab, Paper } from '@mui/material'; import { useAuth } from '../contexts/AuthContext'; import ChangePasswordModal from '../components/ChangePasswordModal'; import { useNavigate, useLocation } from 'react-router-dom'; // Para manejar la navegación y la ruta actual interface MainLayoutProps { children: ReactNode; // Esto será el que renderiza las páginas del módulo } // Definir los módulos y sus rutas base const modules = [ { label: 'Inicio', path: '/' }, { label: 'Distribución', path: '/distribucion' }, // Asumiremos rutas base como /distribucion, /contables, etc. { label: 'Contables', path: '/contables' }, { label: 'Impresión', path: '/impresion' }, { label: 'Reportes', path: '/reportes' }, { label: 'Radios', path: '/radios' }, { label: 'Usuarios', path: '/usuarios' }, ]; const MainLayout: React.FC = ({ children }) => { const { user, logout, showForcedPasswordChangeModal, isPasswordChangeForced, passwordChangeCompleted, setShowForcedPasswordChangeModal, isAuthenticated } = useAuth(); const navigate = useNavigate(); const location = useLocation(); // Para obtener la ruta actual // Estado para el tab seleccionado const [selectedTab, setSelectedTab] = useState(false); // Efecto para sincronizar el tab seleccionado con la ruta actual useEffect(() => { const currentModulePath = modules.findIndex(module => location.pathname === module.path || (module.path !== '/' && location.pathname.startsWith(module.path + '/')) ); if (currentModulePath !== -1) { setSelectedTab(currentModulePath); } else if (location.pathname === '/') { setSelectedTab(0); // Seleccionar "Inicio" si es la raíz } else { setSelectedTab(false); // Ningún tab coincide (podría ser una sub-ruta no principal) } }, [location.pathname]); const handleModalClose = (passwordChangedSuccessfully: boolean) => { // ... (lógica de handleModalClose existente) ... if (passwordChangedSuccessfully) { passwordChangeCompleted(); } else { if (isPasswordChangeForced) { logout(); } else { setShowForcedPasswordChangeModal(false); } } }; const handleTabChange = (_event: React.SyntheticEvent, newValue: number) => { setSelectedTab(newValue); navigate(modules[newValue].path); // Navegar a la ruta base del módulo }; // Si el modal de cambio de clave forzado está activo, no mostramos la navegación principal aún. // El modal se superpone. if (showForcedPasswordChangeModal && isPasswordChangeForced) { return ( {/* Podrías querer un fondo o layout mínimo aquí si el modal no es pantalla completa */} ); } return ( Sistema de Gestión - El Día {user && Hola, {user.nombreCompleto}} {isAuthenticated && !isPasswordChangeForced && ( )} {/* Navegación Principal por Módulos */} {/* Usamos Paper para un fondo consistente para los Tabs */} {modules.map((module) => ( ))} {/* Contenido del Módulo (renderizado por en AppRoutes) */} {children} Usuario: {user?.username} | Acceso: {user?.esSuperAdmin ? 'Super Admin' : `Perfil ID ${user?.userId}`} | Versión: {/* TODO: Obtener versión */} {/* Modal para cambio de clave opcional (no forzado) */} {/* Si showForcedPasswordChangeModal es true pero isPasswordChangeForced es false, se mostrará aquí también. */} ); }; export default MainLayout;