package repo

import (
	"sync"

	"github.com/phayes/freeport"
	"github.com/tidbcloud/dataflow-service/app/repo/entity"
	"github.com/tidbcloud/dataflow-service/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.BackupSchedule{}, &entity.Backup{}, entity.Bucket{}, &entity.LogBackup{}, &entity.BackupSetting{},
			&entity.Restore{}, &entity.ServerlessBackup{}, &entity.ServerlessUserClusterBackup{},
			&entity.ServerlessRestore{}, entity.LogBackupTruncate{}, entity.PitBackupSwitch{},
			&entity.Import{},
			&entity.KernelChangefeedTrafficRecord{}, &entity.BillingRecord{},
			&entity.TiDBClusterGCSwitch{},
			&entity.BizChangefeed{}, &entity.Replay{}, &entity.ClassicRestoreAccess{})
	})
	return testDB, err
}
