package managerserver

import (
	"io"
	"net/http"
	"time"

	"github.com/pingcap/errors"
	"github.com/tidbcloud/aws-shared-provider/pkg/metrics"
)

func (s *server) check(w http.ResponseWriter, r *http.Request) {
	logger := log.WithName("tidb/check")
	logger.V(1).Info("req param", "req", r.URL)

	var err error
	var token, ip, ns string
	start := time.Now()

	defer func() {
		if err != nil {
			w.WriteHeader(http.StatusInternalServerError)
			_, _ = io.WriteString(w, err.Error())
			metrics.RequestHistogram.WithLabelValues("check", "500", ns).Observe(time.Since(start).Seconds())
			return
		}
		_, _ = io.WriteString(w, "ok")
		metrics.RequestHistogram.WithLabelValues("check", "200", ns).Observe(time.Since(start).Seconds())
	}()

	token, ip, ns = r.URL.Query().Get("token"), r.URL.Query().Get("ip"), r.URL.Query().Get("ns")
	if token == "" || ip == "" {
		emptyParamErr := errors.New("token or ip empty")
		logger.Error(emptyParamErr, "get param")
		err = emptyParamErr
		return
	}

	logger = logger.WithValues("token", token, "ip", ip, "ns", ns)

	tManager := s.tManagers[ns]
	if tManager == nil {
		logger.Error(noTidbPoolErr, "noTidbPoolErr")
		err = noTidbPoolErr
		return
	}
	if err = tManager.CheckTidb(r.Context(), token, ip); err != nil {
		logger.Error(err, "CheckTidb")
		return
	}
}
