package workers

import (
	"github.com/pingcap/dbaas/billing2/config"
	"github.com/pingcap/dbaas/billing2/model/creditriskcontrol"
	"github.com/pingcap/dbaas/billing2/utils/concurrency"
	"github.com/pingcap/dbaas/billing2/utils/log"
	"go.uber.org/zap"
)

func ProgressTenantCreditRiskClose() error {
	closeModel := &creditriskcontrol.TenantCloseModel{}
	tenantIDs, err := closeModel.GetAllCreditCloseRunningTenantIDs()
	if err != nil {
		return err
	}

	maxRunning := config.Get().GetInt(config.MaxRunningTenantCreditRiskClose)

	if len(tenantIDs) > maxRunning {
		log.Error("more than max running tenant credit close records", zap.Int("max running", maxRunning), zap.Int("all", len(tenantIDs)))
		tenantIDs = tenantIDs[:maxRunning]
	}
	err = concurrency.RunInPoolWithIDs(
		config.Get().GetUint(config.DefaultWorkerConcurrency),
		func(tenantID uint) {
			err = closeModel.ProcessTenantClose(tenantID)
			if err != nil {
				log.Error("failed progress tenant credit close", zap.Uint("tenantID", tenantID), zap.Error(err))
			}
		},
		tenantIDs,
	)
	return err
}
