package api

import (
	"errors"
	"time"

	"github.com/pingcap/dbaas/billing2/handler/novuhandler"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/billing2/billing_errors"
	"github.com/pingcap/dbaas/billing2/forms"
	"github.com/pingcap/dbaas/billing2/utils/ginutils"
	"github.com/pingcap/dbaas/billing2/utils/log"
	"github.com/pingcap/dbaas/billing2/utils/timeutils"
	"go.uber.org/zap"
)

// @Summary Bulk Trigger event API
// @Schemes
// @Accept json
// @Produce json
// @Param trigger body forms.Trigger true "trigger"
// @Success 200 {object} forms.OKType
// @Router /tenants/{tenant_id}/bulk_trigger [post]
func (s *API) BulkTriggerEventByAPI(c *gin.Context) (ginutils.HandlerFuncResult, error) {
	trigger := &forms.Trigger{}
	err := c.ShouldBindJSON(trigger)
	if err != nil {
		return nil, billing_errors.NewInvalidInputError(err)
	}
	tenantID, err := getTenantIDFromURI(c)
	if err != nil {
		return nil, err
	}
	if trigger.IsSendNow {
		trigger.ScheduleTime = timeutils.GetNow().Add(31 * time.Second)
	} else {
		return nil, billing_errors.NewInvalidInputError(errors.New("is_send_now must true"))
	}
	if len(trigger.TargetIDList) != 1 {
		return nil, billing_errors.NewInvalidInputError(errors.New("TargetIDList error"))

	}

	log.Info("BulkTriggerEventByAPI", zap.Any("trigger", trigger), zap.Uint("tenantID", tenantID))
	_, err = novuhandler.Get().BulkTriggerEvent(tenantID, *trigger)
	if err != nil {
		return nil, err
	}
	return forms.OK, nil

}

func InitializeNotificationsAPIRouter(router ginutils.MyRoute) {
	api := &API{}
	router.HandleWithError("POST", "/tenants/:tenant_id/bulk_trigger", api.BulkTriggerEventByAPI)

}
