package premium_dm

import (
	"context"
	"time"

	"github.com/go-co-op/gocron"
	"github.com/tidbcloud/dataflow-service-ng/app/container"
	"github.com/tidbcloud/dataflow-service-ng/app/worker/common"
)

const premiumDMIntervalSeconds = 5

func NewWorkerScheduler(ctx context.Context, loc *time.Location) (*gocron.Scheduler, error) {
	s := gocron.NewScheduler(loc)
	s.SingletonModeAll()

	if _, err := s.Every(premiumDMIntervalSeconds).Seconds().
		Do(common.WorkerFunWrapper("premium-dm-worker", RunPremiumDMTaskWorker)); err != nil {
		return nil, err
	}
	if _, err := s.Every(premiumDMIntervalSeconds).Seconds().
		Do(common.WorkerFunWrapper("premium-dm-precheck-worker", RunPremiumDMPrecheckWorker)); err != nil {
		return nil, err
	}
	return s, nil
}

func RunPremiumDMTaskWorker(ctx context.Context) error {
	return container.Global().PremiumDMWorker.Run(ctx)
}

func RunPremiumDMPrecheckWorker(ctx context.Context) error {
	return container.Global().PremiumDMPrecheckWorker.Run(ctx)
}
