package api

import (
	"encoding/json"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/billing2/billing_errors"
	"github.com/pingcap/dbaas/billing2/forms"
	"github.com/pingcap/dbaas/billing2/handler/eventbushandler"
	"github.com/pingcap/dbaas/billing2/utils/ginutils"
)

type EventAPI struct {
}

// @Summary Publish Event
// @Schemes
// @Accept json
// @Produce json
// @Param payload body eventbushandler.Event true "payload"
// @Success 200 {object} forms.OKType
// @Router /events [put]
func (s *EventAPI) PublishEvent(c *gin.Context) (ginutils.HandlerFuncResult, error) {
	event := &eventbushandler.Event{}
	deco := json.NewDecoder(c.Request.Body)
	deco.UseNumber()
	err := deco.Decode(event)
	if err != nil {
		return 0, billing_errors.NewInvalidInputError(err)
	}
	err = eventbushandler.Get().PublishEvent(event.EventType, event)
	if err != nil {
		return nil, err
	}
	return forms.OK, nil
}

func InitializeEventRouter(router ginutils.MyRoute) {
	s := &EventAPI{}
	router.HandleWithError("PUT", "/events", s.PublishEvent)
}
