const Company = require('../models/Company'); module.exports = { isAuthenticated: (req, res, next) => { if (req.session.user) return next(); req.flash('error_msg', 'Por favor inicia sesión'); res.redirect('/login'); }, isSuperAdmin: (req, res, next) => { if (req.session.user && req.session.user.rol === 'superadmin') return next(); req.flash('error_msg', 'Acceso denegado'); res.redirect('/'); }, isCompanyAdmin: (req, res, next) => { if (req.session.user && ['superadmin', 'admin'].includes(req.session.user.rol)) return next(); req.flash('error_msg', 'Acceso denegado'); res.redirect('/'); }, isAgent: (req, res, next) => { if (req.session.user && ['superadmin', 'admin', 'agent'].includes(req.session.user.rol)) return next(); req.flash('error_msg', 'Acceso denegado'); res.redirect('/'); }, loadCompany: async (req, res, next) => { if (req.session.user && req.session.user.company_id) { const company = await Company.findById(req.session.user.company_id); res.locals.company = company; } next(); }, checkPlan: (feature) => { return async (req, res, next) => { if (!res.locals.company) return next(); const company = res.locals.company; if (!company.is_active) { req.flash('error_msg', 'Tu cuenta está desactivada'); return res.redirect('/logout'); } if (feature === 'users') { const User = require('../models/User'); const count = await User.countByCompany(company.id); if (count >= company.max_users) { req.flash('error_msg', `Límite de usuarios alcanzado (${company.max_users})`); return res.redirect('/'); } } if (feature === 'tickets') { const Ticket = require('../models/Ticket'); const [rows] = await require('../config/db').query( 'SELECT COUNT(*) as total FROM tickets WHERE company_id = ?', [company.id] ); if (rows[0].total >= company.max_tickets) { req.flash('error_msg', `Límite de tickets alcanzado (${company.max_tickets})`); return res.redirect('/'); } } next(); }; } };