package httpapi

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/observability/o11ymetering/pkg/common/message"
	"github.com/tidbcloud/observability/o11ymetering/pkg/service/statistic"
	"github.com/tidbcloud/observability/pkg/regionalapi/apiinterceptor"
)

func GenerateStatisticTask(c *gin.Context) {
	req := message.GenerateStatisticTaskReq{}
	if ok := HandleJsonRequestFromBody(c, &req); ok {
		resp, err := statistic.GenerateStatisticTask(c, req)

		if err != nil {
			apiinterceptor.Fail(c, err)
		} else {
			apiinterceptor.Succeed(c, http.StatusAccepted, resp)
		}
	}
}

func ExecuteStatisticTask(c *gin.Context) {
	req := &message.ExecuteStatisticTaskReq{
		ID: c.Param("id"),
	}

	resp, err := statistic.ExecuteStatisticTask(c, *req)

	if err != nil {
		apiinterceptor.Fail(c, err)
	} else {
		apiinterceptor.Succeed(c, http.StatusAccepted, resp)
	}
}

func ReplayStatisticTasks(c *gin.Context) {
	req := message.ReplayStatisticTasksReq{}
	if ok := HandleJsonRequestFromBody(c, &req); ok {
		resp, err := statistic.ReplayStatisticTasks(c, req)

		if err != nil {
			apiinterceptor.Fail(c, err)
		} else {
			apiinterceptor.Succeed(c, http.StatusAccepted, resp)
		}
	}
}
