package handler

import (
	"github.com/robfig/cron/v3"
	"sync"
)

var (
	jobWg   sync.WaitGroup //任务的等待组
	cronPtr *cron.Cron     //定时任务对象的指针
)

// WaitAllJobDone 等待当前任务全部退出
func WaitAllJobDone() {
	//结束定时任务(定时任务下次不会再执行,不会结束当前正在执行的任务)
	cronPtr.Stop()
	//等待当前在执行的任务结束,这边一定要在主进程中调用，不然主进程退出了，其他任务还有可能在执行
	jobWg.Wait()
}

// 统一给任务增加wg
func handlerJobRun(j MyJob) {
	jobWg.Add(1)
	defer jobWg.Done()
	j.jobContent()
}

// StartCronJobs 开始定时任务
func StartCronJobs() {
	go func() {
		c := cron.New(cron.WithSeconds())
		cronPtr = c
		jobs := GetJobs()
		for _, job := range jobs {
			if job.Enable() == false || len(job.Specs()) == 0 {
				continue
			}
			for _, spec := range job.Specs() {
				c.AddJob(spec, job)
			}
		}
		c.Start()
	}()
}
