package middleware

import (
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
	"github.com/labstack/gommon/log"
	"github.com/labstack/gommon/random"

	"github.com/pingcap/test-infra/services/rms/utils"
)

func UseCommonMiddlewares(e *echo.Echo) {
	e.Pre(middleware.RemoveTrailingSlash())
	e.Use(middleware.RequestIDWithConfig(middleware.RequestIDConfig{
		Skipper: func(c echo.Context) bool {
			return len(c.Request().Header.Get(echo.HeaderXRequestID)) > 0
		},
		Generator: func() string {
			return "gen-" + random.String(16)
		},
	}))

	e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
		return func(c echo.Context) error {
			ctx := utils.NewContext(c)
			return next(ctx)
		}
	})
	AuthSetup()
	e.Use(MetricEndpoint)
	e.Use(Authenticate)

	e.Use(middleware.Logger())
	e.Use(middleware.RecoverWithConfig(middleware.RecoverConfig{
		LogLevel: log.ERROR,
	}))
	e.HTTPErrorHandler = StatusErrorHandling
}
