package api

import (
	"net/http"

	"github.com/elazarl/go-bindata-assetfs"
	"github.com/gorilla/mux"
	"github.com/pingcap/wormhole/asset"
	"github.com/pingcap/wormhole/ether"
	"github.com/urfave/negroni"
)

const apiPrefix = "/ether"

// NewHandler creates a HTTP handler for API.
func NewHandler(svr *ether.Server) http.Handler {
	engine := negroni.New()

	recovery := negroni.NewRecovery()
	engine.Use(recovery)

	fs := &assetfs.AssetFS{
		Asset:     asset.Asset,
		AssetDir:  asset.AssetDir,
		AssetInfo: asset.AssetInfo,
	}
	static := NewStatic(fs)
	static.Prefix = apiPrefix + "/web"
	engine.Use(static)

	router := mux.NewRouter()
	router.PathPrefix(apiPrefix).Handler(
		negroni.New(
			newRedirector(svr),
			negroni.Wrap(createRouter(apiPrefix, svr)),
		))
	engine.UseHandler(router)

	return engine
}
