package infra

import "net/http"

// HTTPMiddlewareChain compone N middlewares en uno solo aplicandolos de izquierda a derecha.
// El primer middleware de la lista es el mas externo (se ejecuta primero).
// Si no se pasan middlewares retorna un Middleware que no modifica el handler.
func HTTPMiddlewareChain(middlewares ...Middleware) Middleware {
	return func(final http.Handler) http.Handler {
		// Aplicar en orden inverso para que el primero quede mas externo
		h := final
		for i := len(middlewares) - 1; i >= 0; i-- {
			h = middlewares[i](h)
		}
		return h
	}
}
