<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Routing\Registrar;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Convierte los `{client}`, `{licenseToken}` y `{environment}` de la ruta en modelos, en
 * la API de administración, **después** de autenticar.
 *
 * Hace lo mismo que `SubstituteBindings`, y existe solo por el orden: ese middleware está
 * en la lista de prioridad del kernel y Laravel lo coloca **antes** de la autenticación.
 * Así, una petición sin token a `/clients/999` respondería 404 en vez de 401, y cualquiera
 * podría ir probando ids para saber cuáles existen. Las rutas de administración quitan
 * `SubstituteBindings` del grupo `api` y ponen esto al final de la cadena.
 *
 * No extiende `SubstituteBindings` a propósito: `withoutMiddleware()` quita también las
 * subclases, y además heredaría su sitio en la lista de prioridad.
 */
class AdminApiBindings
{
    public function __construct(private Registrar $router) {}

    public function handle(Request $request, Closure $next): Response
    {
        $ruta = $request->route();

        $this->router->substituteBindings($ruta);
        $this->router->substituteImplicitBindings($ruta);

        return $next($request);
    }
}
