package scheduled

import (
	"time"

	"github.com/pingcap/test-infra/common/model"
	"github.com/pingcap/test-infra/services/tcms/service"
	"github.com/pingcap/test-infra/services/tcms/utils"
)

func NewTrigger(triggerSvc service.TriggerService) *trigger {
	return &trigger{triggerSvc: triggerSvc}
}

type trigger struct {
	triggerSvc service.TriggerService
}

func (t *trigger) Run() {
	_, _ = t.trigger(model.TriggerTypeOnce, 10)
	// _, _ = t.trigger(model.TriggerTypeCron, 10)
	_, _ = t.trigger(model.TriggerTypeRelease, 1) // FIXME@feihu: refact release trigger procedure
}

func (t *trigger) trigger(ty model.TriggerType, count int) (triggeredCount int, err error) {
	ctx := utils.FakeCtx()
	if triggeredCount, err = t.triggerSvc.Trigger(ctx, ty, time.Now(), count); err != nil {
		ctx.Log().With("type", ty, "count", count).Errorf(err, "trigger failed")
		return 0, err
	}
	return triggeredCount, nil
}
