package metadb

import (
	"github.com/pingcap/dbaas/central/db"
	"github.com/pingcap/dbaas/central/db/dbutil"
	"github.com/pingcap/dbaas/central/db/entity"
	"gorm.io/gorm"
)

// getIntegrations gets ids of projects whose integration type is matched and status is active.
func getIntegrations(integrationTypes []entity.IntegrationType) ([]entity.Integration, error) {
	is := make([]entity.Integration, 0)
	err := db.Transaction(func(tx *gorm.DB) error {
		q := entity.NewIntegrationQuerySet(tx).
			ProviderTypeIn(integrationTypes...).
			// We should include entity.IntegrationStatusError since it also means the integration is active.
			StatusIn(entity.IntegrationStatusActive, entity.IntegrationStatusError)
		return q.All(&is)
	})
	if err != nil {
		return nil, err
	}
	return is, nil
}

func getClusters(projectID []entity.ID) ([]entity.Cluster, error) {
	cs := make([]entity.Cluster, 0)
	err := db.Transaction(func(tx *gorm.DB) error {
		tx = dbutil.PreloadCluster(tx)
		q := entity.NewClusterQuerySet(tx).
			ProjectIDIn(projectID...).
			StatusIn(entity.ClusterStatusNormal)
		return q.All(&cs)
	})
	if err != nil {
		return nil, err
	}
	return cs, nil
}
