package cluster

// Database access should be done through this file.
import (
	"github.com/tidbcloud/account/internel/dao/entity"
	provider2 "github.com/tidbcloud/account/internel/dao/provider"
	"gorm.io/gorm"
	"gorm.io/gorm/clause"
)

func GetActiveClusterCount(tx *gorm.DB, tenantID entity.ID) (int64, error) {
	var count int64
	return count, tx.Clauses(clause.Locking{Strength: "UPDATE"}).Table("clusters").Where(" clusters.tenant_id=? and clusters.status not in (?) ", tenantID, entity.DeletedOrClearedClusterStatus).Count(&count).Error
}

// GetProviderDevTierClustersCount returns provider active dev tier clusters count
func GetProviderDevTierClustersCount(tx *gorm.DB, providerName entity.Cloud) (int64, error) {
	var count int64
	provider, err := provider2.GetProvider(tx, providerName)
	if err != nil {
		return count, err
	}
	return entity.NewClusterQuerySet(tx).FreeEq(true).
		StatusNotIn(entity.DeletedOrClearedClusterStatus...).ProviderIDEq(provider.ID).Count()
}
