package api

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/admin/forms"
	"github.com/pingcap/dbaas/central/db/entity"
)

// @Summary Get cluster TCU
// @tags GetClusterTCU
// @Description Get cluster TCU
// @Accept  json
// @Produce json
// @Param org_id path string true "org_id"
// @Success 200 {object} forms.ClusterTCU
// @Router /orgs/{org_id}/clusters/{cluster_id}/tcu [get]
func GetClusterTCU(c *gin.Context) {
	req := forms.GetOrgIDAndClusterIDReq{}
	if err := c.ShouldBindUri(&req); err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}
	userContext := GetUserContext(c)
	cdcContext, err := userContext.CDCModel().BgContext(entity.ID(req.OrgID))
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	tcuNumber, err := cdcContext.GetClusterTCU(entity.ID(req.ClusterID))
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	result := forms.ClusterTCU{
		TCUNumber: tcuNumber,
	}

	Success(c, result, http.StatusOK)
}

// @Summary Update Cluster TCU
// @Tags Salesforce
// @Accept  json
// @Produce json
// @Param org_id path string true "org_id"
// @Param tcu body forms.ClusterTCU true "cluster tcu"
// @Success 200 {object} forms.EmptyResponse
// @Router /orgs/{org_id}/clusters/{cluster_id}/tcu [put]
func UpdateClusterTCU(c *gin.Context) {
	req := forms.GetOrgIDAndClusterIDReq{}
	if err := c.ShouldBindUri(&req); err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}
	input := forms.ClusterTCU{}
	if err := c.ShouldBindJSON(&input); err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}
	userContext := GetUserContext(c)
	cdcContext, err := userContext.CDCModel().BgContext(entity.ID(req.OrgID))
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	err = cdcContext.UpdateClusterTCU(entity.ID(req.ClusterID), input.TCUNumber)
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	Success(c, nil, http.StatusOK)
}
