<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsurePermiso
{
    /**
     * Uso: middleware('permiso:pos.acceso') o, con semantica OR,
     * middleware('permiso:facturas.consultar,pos.acceso') (basta con tener
     * uno cualquiera de los permisos listados). Un administrador siempre
     * pasa, via User::puede().
     */
    public function handle(Request $request, Closure $next, string ...$claves): Response
    {
        $usuario = $request->user();
        $tienePermiso = $usuario && collect($claves)->contains(fn ($clave) => $usuario->puede($clave));

        abort_unless($tienePermiso, 403, 'No tenés permiso para acceder a esta sección.');

        return $next($request);
    }
}
