package middleware

import (
	"net/http"

	"github.com/labstack/echo"
)

type (
	RedirectToSlashOptions struct {
		Code int
	}
)

// StripTrailingSlash returns a middleware which removes trailing slash from request
// path.
func StripTrailingSlash() echo.HandlerFunc {
	return func(c *echo.Context) error {
		p := c.Request().URL.Path
		l := len(p)
		if p[l-1] == '/' {
			c.Request().URL.Path = p[:l-1]
		}
		return nil
	}
}

// RedirectToSlash returns a middleware which redirects requests without trailing
// slash path to trailing slash path.
func RedirectToSlash(opts ...RedirectToSlashOptions) echo.HandlerFunc {
	code := http.StatusMovedPermanently

	if len(opts) > 0 {
		o := opts[0]
		code = o.Code
	}

	return func(c *echo.Context) error {
		p := c.Request().URL.Path
		l := len(p)
		if p[l-1] != '/' {
			c.Redirect(code, p+"/")
		}
		return nil
	}
}