package repo

import (
	"sync"

	"github.com/phayes/freeport"
	"github.com/tidbcloud/dataflow-service-ng/app/repo/entity"
	"github.com/tidbcloud/dataflow-service-ng/pkg/fakedb"
	"github.com/tidbcloud/pkgv2/gormutil"
	"gorm.io/gorm"
)

var (
	once   sync.Once
	testDB *gorm.DB
)

func GetFakeDB() (*gorm.DB, error) {
	var err error
	once.Do(func() {
		port, err1 := freeport.GetFreePort()
		if err != nil {
			err = err1
			return
		}
		testDBCfg := gormutil.Config{
			Host:     "localhost",
			Password: "123456",
			Port:     uint16(port),
			User:     "root",
			Database: "test",
		}
		testDB, err = fakedb.StartFakeDB4Test(testDBCfg)
		if err != nil {
			return
		}
		err = testDB.AutoMigrate(entity.ORMModels...)
	})
	return testDB, err
}
