package opworker

import (
	"sync"

	api "github.com/tidbcloud/core-portal/internal/central/infra-api"
	"github.com/tidbcloud/core-portal/internal/central/model/cluster"
	mailv2 "github.com/tidbcloud/pkgv2/mail/v2"
)

type Manager struct {
	clusterModel     *cluster.Model
	backgroundWorker sync.Map
	lck              sync.Mutex
	api              *api.API
	mailFacade       mailv2.Facade
}

func New(clusterModel *cluster.Model, api *api.API, mailFacade mailv2.Facade) *Manager {
	return &Manager{
		clusterModel:     clusterModel,
		backgroundWorker: sync.Map{},
		lck:              sync.Mutex{},
		api:              api,
		mailFacade:       mailFacade,
	}
}

func (c *Manager) StartBackgroundWorkers() error {
	w, err := NewGlobalBgWorker(c)
	if err != nil {
		return err
	}

	w.Start()
	return nil
}
