package migrate

import (
	"github.com/pingcap/log"
	"github.com/tidbcloud/dataflow-service/app/repo/entity"
	model "github.com/tidbcloud/dataflow-service/internal/db/entity"
	"gorm.io/gorm"
)

// models owned by dataflow-service
// NOTE: if any new table added (and owned by dataflow-service) team, do not forget to add them here.
var models = []interface{}{
	// import
	&model.Import{},
	&model.ImportTable{},
	&model.ImportIntoPrecheckTask{},
}

func initDataflowDB(db *gorm.DB) error {
	log.L().Info("init empty database with data")
	// create the tables in an empty database
	// it is 3 time faster than migrate model individually
	// NOTE: not all models defined in `model.go` are owned by dataflow-service, so we should NOT do the migration for them.
	var allModels []interface{}
	// must pass slice values here, otherwise the allModels is a slice of slices, gorm will report unsupported data type: [] error
	allModels = append(allModels, models...)
	allModels = append(allModels, entity.ORMModels...)
	if err := db.AutoMigrate(allModels...); err != nil {
		return err
	}
	log.L().Info("after create database tables")
	for _, changefeedInstanceType := range entity.DefaultChangefeedInstanceTypes {
		if err := db.Save(changefeedInstanceType).Error; err != nil {
			return err
		}
	}
	return nil
}
