package workers

import (
	"github.com/pingcap/dbaas/cost-metering-service/log"
	"go.uber.org/zap"
	"math/rand"
	"time"

	"github.com/go-co-op/gocron"
	"github.com/pingcap/dbaas/cost-metering-service/utils/panicIf"
	"github.com/pingcap/dbaas/cost-metering-service/wrapworker"
)

func RunWorker(maxStartDuration time.Duration) {
	workerConfigs := []struct {
		JobFunc          interface{}
		Interval         string
		runInPersonalEnv bool
	}{
		//{CalculateWorker, config.Get().GetString("1d"), false},
		{CalculateWorker, "1h", false},
	}
	workerSchedules := make([]*gocron.Scheduler, len(workerConfigs))
	for i, conf := range workerConfigs {
		s, err := wrapworker.NewWorker(conf.JobFunc, conf.Interval, conf.runInPersonalEnv)
		if err != nil {
			log.Error("RunWorker", zap.Error(err))
		}
		panicIf.Error(err)
		workerSchedules[i] = s
	}
	for _, s := range workerSchedules {
		time.Sleep(maxStartDuration * time.Duration(rand.Float32()*100) / 100)
		s.StartAsync()
	}
}
