// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.

package middleware

import (
	"github.com/sirupsen/logrus"
	"net/http"
	"time"
)

type Middleware func(handler http.Handler) http.Handler

func NewLoggingMiddleware(l *logrus.Entry) Middleware {

	return func(next http.Handler) http.Handler {
		logging := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			start := time.Now()
			uri := r.RequestURI
			method := r.Method
			duration := time.Since(start)
			next.ServeHTTP(w, r)

			l.WithFields(logrus.Fields{
				"uri":      uri,
				"method":   method,
				"duration": duration,
			}).Infof("Handled HTTP request %s %s", method, uri)
		})

		return logging
	}
}
