package mux

import "net/url"
import "net/http"

type HTTP struct {
	Mux[http.Handler]
}

func NewHTTP (resolver Resolver) *HTTP {
	mux := &HTTP { }
	mux.Mux.Redirect = mux.newRedirect
	mux.Mux.NotFound = mux.newNotFound
	mux.Mux.Resolver = resolver
	return mux
}

func (mux *HTTP) ServeHTTP (res http.ResponseWriter, req *http.Request) {
	if req.RequestURI == "*" {
		if req.ProtoAtLeast(1, 1) {
			res.Header().Set("Connection", "close")
		}
		res.WriteHeader(http.StatusBadRequest)
		return
	}

	handler, _ := mux.Handler(req.URL)
	handler.ServeHTTP(res, req)
}

func (mux *HTTP) newNotFound (where *url.URL) http.Handler {
	return http.NotFoundHandler()
}

func (mux *HTTP) newRedirect (where *url.URL) http.Handler {
	return http.RedirectHandler(where.String(), http.StatusMovedPermanently)
}
