package controller

import (
	"dataservices/commons/ginparser"
	dto "dataservices/internal/dto/dataapi_control"
	service "dataservices/internal/service/dataapi_control"
	"time"

	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/tiinf/errs"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"
)

func DataappMetricsQuery(c *gin.Context) {
	ctx := c.Request.Context()
	params := ginparser.NewCommonParamsByGin(c)
	createdBy, _ := params.GetUserEmail()
	startTime := time.Now()
	failResAndLog := func(err errs.Error) {
		c.JSON(err.HTTPCode(), dto.NewErrorToBaseResp(err.HTTPCode(), err.ErrMsg()))
		tilog.Error(ctx, "DS-Region-Dataapi-Control-/apps/:app_id/dataapp-metrics/query[post]-DataappMetricsQuery failed",
			zap.Uint64("app-id", params.AppID),
			zap.Duration("cost", time.Since(startTime)),
			zap.Error(err),
			zap.String("user", createdBy))
	}

	var req dto.PromQueryReq
	terr := parseParamFromBody(c, &req)
	if terr != nil {
		failResAndLog(terr)
		return
	}
	res, err := service.MetricsQuery(ctx, &req)
	if err != nil {
		failResAndLog(errs.NewInternalHTTP("execute faile", err))
		return
	}
	c.JSON(200, res)
}
