package cron

import (
	"github.com/robfig/cron/v3"

	"github.com/pingcap-inc/pchub/pkg/log"
)

type taskGroup struct {
	c     *cron.Cron
	group string
}

func NewTaskGroup(group string) *taskGroup {
	return &taskGroup{
		c:     cron.New(cron.WithSeconds()),
		group: group,
	}
}

// Add new cron job into group.
func (tg *taskGroup) Add(spec string, fn func()) error {
	if _, err := tg.c.AddFunc(spec, fn); err != nil {
		log.Error("Cron AddFunc failed, err: " + err.Error())

		return err
	}

	return nil
}

// Execute all cron jobs in group.
func (tg *taskGroup) Start() {
	log.Info("Start task group: " + tg.group)
	tg.c.Start()
}

// Stop all cron jobs in group.
func (tg *taskGroup) Stop() {
	log.Info("Stop task group: " + tg.group)
	tg.c.Stop()
}
