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;