package repo

import (
	"context"
	"fmt"
	"testing"

	tntent "github.com/tidbcloud/devops/entity/tenant"
	tntmod "github.com/tidbcloud/devops/models/tenant"
	"github.com/tidbcloud/devops/pkg/infra/utils/repoopt"
	"github.com/tidbcloud/devops/pkg/infra/utils/test"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/tidbcloud/pkgv2/db"
	"gorm.io/gorm"
)

func TestRepo(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "Tenant Repo Suite", test.ReporterConfig())
}

var _ = Describe("[TenantRepo]", func() {
	var fw = test.Framework()

	Describe("[Driver]", func() {
		var (
			dbProvider db.Provider
		)

		BeforeEach(func() {
			fw.InitUTDB()
			dbProvider = fw.UTDBProvider
			// d = &tenantRepo{
			// 	cvter:      cvt.NewConverter(),
			// 	dbProvider: fw.UTDBProvider,
			// }
		})
		Context("[Tenant]", func() {
			It("list tenant", func() {
				opts := make([]repoopt.Option, 0)
				opts = append(opts, InIds([]uint64{1, 2, 3}))
				opts = append(opts, InRegion([]tntent.TenantRegion{tntent.TenantRegionAPAC}))
				opts = append(opts, Search("test"))
				rdb := dbProvider.ReadDB(context.Background())
				fmt.Println(
					rdb.ToSQL(func(tx *gorm.DB) *gorm.DB {
						tx = tx.Model(&tntmod.Tenant{})
						tx = repoopt.Aggregate(opts...).Apply(tx)
						return tx.Find(&tntmod.Tenant{})
					}),
				)
			})
		})
	})
})
