package handler

import (
	"net/http"

	"github.com/labstack/echo/v4"

	"github.com/pingcap/test-infra/common/model"

	serror "github.com/pingcap/test-infra/services/tcms/service/common/errors"
	"github.com/pingcap/test-infra/services/tcms/utils"
)

// GetSummaryByDate ...
// @Summary Get Daily Summary By Date
// @ID get-daily-summary
// @Tags daily-summary
// @Param date query string false "Filter by date, choose by asia/shanghai date. format(2006-01-02)"
// @Success 200 {object} model.DailySummary
// @Failure default {object} HTTPError
// @Router /summary [get]
func (h *HTTPHandler) GetSummaryByDate(c echo.Context) (err error) {
	ctx := c.(utils.Context)

	summary, err := h.service.Summary.GetDailySummary(ctx, ctx.QueryParam("date"))
	if err != nil {
		return serror.NewMsg(http.StatusInternalServerError, "do summary failed, err= %v", err)
	}

	return ctx.JSON(http.StatusOK, summary)
}

// GetReleaseSummary ...
// @Summary Get Release Summary
// @ID get-release-summary
// @Tags get-release-summary
// @Param id path integer false "release trigger id"
// @Param triage_phase query string false "Filter by triage_phase" Enums(TO_TRIAGE,TRIAGING,TRIAGED)
// @Success 200 {object} model.GetReleaseSummaryResponse
// @Failure default {object} HTTPError
// @Router /summary/release/:id [get]
func (h *HTTPHandler) GetReleaseSummary(c echo.Context) (err error) {
	ctx := c.(utils.Context)

	id, err := utils.ParseID(ctx.Param("id"))
	if err != nil {
		return err
	}

	var triagePhase *model.TriagePhase
	phase := model.TriagePhase(ctx.QueryParam("triage_phase"))
	if phase != "" {
		if err := phase.Validate(); err != nil {
			return serror.New(http.StatusBadRequest, err)
		}
		triagePhase = &phase
	}

	summary, err := h.service.Summary.GetReleaseSummary(ctx, id, triagePhase)
	if err != nil {
		return serror.NewMsg(http.StatusInternalServerError, "do summary failed, err= %v", err)
	}

	return ctx.JSON(http.StatusOK, summary)
}
