<?php
namespace App\Middleware;

use App\Services\AuthService;

/**
 * Middleware para control de acceso basado en roles
 */
class RoleMiddleware
{
    /**
     * Verifica que el usuario tenga uno de los roles permitidos
     * 
     * @param string|array $allowedRoles Roles permitidos
     * @param bool $redirect Si debe redirigir al login o mostrar error 403
     */
    public static function check($allowedRoles, $redirect = false)
    {
        $auth = new AuthService();
        
        // Verificar si está autenticado
        if (!$auth->isLoggedIn()) {
            if ($redirect) {
                redirect(siteUrl('login.php'));
            } else {
                http_response_code(401);
                die('No autorizado. Por favor, inicia sesión.');
            }
        }
        
        // Verificar rol
        if (!$auth->hasRole($allowedRoles)) {
            http_response_code(403);
            die('Acceso denegado. No tienes permisos para acceder a esta página.');
        }
    }
    
    /**
     * Middleware solo para administradores
     */
    public static function admin()
    {
        self::check('admin');
    }
    
    /**
     * Middleware para coordinadores y administradores
     */
    public static function coordinador()
    {
        self::check(['admin', 'coordinador']);
    }
    
    /**
     * Middleware para cualquier usuario autenticado
     */
    public static function auth()
    {
        $auth = new AuthService();
        $auth->requireAuth();
    }
}
