package regionalapi

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/observability/pkg/common/constants"
	"github.com/tidbcloud/observability/pkg/common/message"
	"github.com/tidbcloud/observability/pkg/regionalapi/apiinterceptor"
	"github.com/tidbcloud/observability/pkg/regionalservice"
)

// AuthAndRouteForDataAccessing
// @Summary Routing and authentication for data link APIs
// @Description Routing and authentication for data link APIs
// @Tags auth
// @Accept json
// @Produce json
// @Param request query message.AuthRouteReq true "auth and route request"
// @Success 200 {object} message.Result{data=message.AuthRouteResp}
// @Failure 404 {object} message.Result
// @Failure 500 {object} message.Result
// @Router /auth/ [get]
func AuthAndRouteForDataAccessing(c *gin.Context) {
	req := &message.AuthRouteReq{
		BizType:       c.GetHeader(string(constants.OpenAPIHeaderBizType)),
		ApplicationID: c.GetHeader(string(constants.OpenAPIHeaderApplicationID)),
		TenantID:      c.GetHeader(string(constants.OpenAPIHeaderOrgId)),
	}

	if ok := apiinterceptor.HandleJsonRequestFromQuery(c, req); ok {
		resp, err := regionalservice.GetHandler().AuthAndRouteForDS(c, *req)
		if err != nil {
			apiinterceptor.Fail(c, err)
		} else {
			apiinterceptor.Succeed(c, http.StatusOK, resp)
		}
	}
}
