package api

import (
	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/billing2/billing_errors"
	"github.com/pingcap/dbaas/billing2/model/marketing/unit_filter"
	"github.com/pingcap/dbaas/billing2/utils/ginutils"
)

type unitFilterAPI struct {
}

// @Summary Get Unit Filter (Credit Type) Tree
// @Schemes
// @Accept json
// @Produce json
// @Success 200 {object} forms.UnitFilterNode
// @Router /unit_filters [get]
// @Router /credit_types [get]
func (s *unitFilterAPI) GetUnitFilterTree(c *gin.Context) (ginutils.HandlerFuncResult, error) {
	return (&unit_filter.Model{}).GetUnitFilterTree()
}

// @Summary Get Unit Filter Quick Selection
// @Schemes
// @Accept json
// @Produce json
// @Success 200 {object} []forms.UnitFilterSlim
// @Param target body string true "target"
// @Router /unit_filters/quick_selections/{target} [get]
func (s *unitFilterAPI) GetUnitFilterQuickSelection(c *gin.Context) (ginutils.HandlerFuncResult, error) {
	targetQuery := struct {
		Target string `uri:"target" binding:"required"`
	}{}
	err := c.ShouldBindUri(&targetQuery)
	if err != nil {
		return 0, billing_errors.NewInvalidInputError(err)
	}
	return (&unit_filter.Model{}).GetUnitFilterQuickSelection(targetQuery.Target)
}

func InitializeUnitFilterRouter(router ginutils.MyRoute) {
	s := &unitFilterAPI{}
	router.HandleWithError("GET", "/unit_filters", s.GetUnitFilterTree)
	router.HandleWithError("GET", "/credit_types", s.GetUnitFilterTree)
	router.HandleWithError("GET", "/unit_filters/quick_selections/:target", s.GetUnitFilterQuickSelection)
}
