package http

import (
	"net/http"
	"strings"
)

func NewLowerQueryParamsHandler(hdlr http.Handler) *LowerQueryParamsHandler {
	return &LowerQueryParamsHandler{hdlr}
}

type LowerQueryParamsHandler struct {
	Handler http.Handler
}

func (h *LowerQueryParamsHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
	err := req.ParseForm()
	if err == nil {
		lowerBoolQueryParams(req)
	}
	h.Handler.ServeHTTP(w, req)
}

func lowerBoolQueryParams(req *http.Request) {
	form := req.Form
	for key, vals := range form {
		for i, val := range vals {
			lowered := strings.ToLower(val)
			if lowered == "true" || lowered == "false" {
				req.Form[key][i] = lowered
			} else {
				req.Form[key][i] = val
			}
		}
	}
}