package api

import (
	"errors"
	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/cost-metering-service/billing_errors"
	"github.com/pingcap/dbaas/cost-metering-service/forms"
	"github.com/pingcap/dbaas/cost-metering-service/log"
	"github.com/pingcap/dbaas/cost-metering-service/model/billing"
	"github.com/pingcap/dbaas/cost-metering-service/utils/ginutils"
)

// @Summary Cost Units
// @Schemes
// @Accept json
// @Produce json
// @Param Cost body forms.UnitCostsInput true "Cost"
// @Success 200 {object} forms.UnitCosts
// @Router /measures [post]

func (s *API) CostUnits(c *gin.Context) (ginutils.HandlerFuncResult, error) {

	costForm := &forms.UnitCostsInput{}
	if err := c.ShouldBindJSON(costForm); err != nil {
		return nil, billing_errors.NewInvalidInputError(err)
	}
	if costForm.Cost == 0 {
		return costForm, nil
	}
	if costForm.Cost < 0 {
		return nil, billing_errors.NewInvalidInputError(errors.New("cost must be greater than 0"))
	}
	//err := sqsmeasurehandler.GetMeasureSender().SendMeasure(tenantID, costForm)
	//if err != nil {
	//	log.Error("failed to send measure to sqs")
	//	return nil, err
	//}
	//return costForm, nil

	model := &billing.MeasureModel{}

	info, err := model.ProcessMeasure(costForm)
	if err != nil {
		return nil, err
	}
	return info, nil
}

// // @Summary Cost
// // @Schemes
// // @Accept json
// // @Produce json
// // @Param tenant_id path string true "tenant_id"
// // @Param Cost body forms.UnitCostsInput true "Cost"
// // @Success 200 {object} forms.UnitCosts
// // @Router /tenants/{tenant_id}/measures/dryrun [post]
func (s *API) CostUnitsTest(c *gin.Context) (ginutils.HandlerFuncResult, error) {
	resp := "test back"
	log.Info("CostUnitsTest ...")
	log.Info("CostUnitsTest ...")
	return resp, nil
}

func InitializeMeasureRouter(router ginutils.MyRoute) {
	s := &API{}
	router.HandleWithError("GET", "/tenants/:tenant_id/cost/test", s.CostUnitsTest)
	router.HandleWithError("POST", "/measures", s.CostUnits)

}
