package proxy

import (
	"net/http"

	"github.com/pingcap/log"
	"github.com/tidbcloud/dataflow-service/internal/constants"
	"go.uber.org/zap"
)

func engineHandler() http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
		// engine-master address is not fixed in infra side, it's stored in every job CR
		addr := req.Header.Get(constants.EngineAddrHeader)
		if len(addr) == 0 {
			log.L().Warn("invalid engine addr", zap.String("path", req.URL.Path))
			http.Error(w, "engine addr is empty or missing", http.StatusBadRequest)
			return
		}
		proxy := GetReverseProxy(addr)
		proxy.Transport = &http.Transport{
			DisableKeepAlives: true,
		}
		proxy.ServeHTTP(w, req)
	})
}

func init() {
	registerProxyRoute(proxyRoute{
		name:    "engine",
		handler: engineHandler(),
	})
}
