package singleton

import (
	"sync"

	"go.uber.org/zap"

	"github.com/tidbcloud/tiinf/monitor/tilog"

	"github.com/tidbcloud/account/commons/config"

	"gopkg.in/auth0.v4/management"
)

var Auth0UserManagement *management.UserManager
var auth0UserManagementInitOnce sync.Once

func GetAuth0UserManagement() *management.UserManager {
	auth0UserManagementInitOnce.Do(func() {
		auth0Config := config.Global().Auth0Config
		auth0Management, err := management.New(auth0Config.Auth0Domain, auth0Config.Auth0ManagementClientID, auth0Config.Auth0ManagementClientSecret)
		if err != nil {
			tilog.PlainInfo("create Auth0UserManagement failed", zap.Error(err))
			return
		}
		Auth0UserManagement = auth0Management.User
		tilog.PlainInfo("Auth0UserManagement init success")
	})
	return Auth0UserManagement
}
