package connection

import "gorm.io/gorm"

var (
	// 存放实体结构
	dbModelMap = make([]interface{}, 0)

	//当前管理数据库
	modelDB *gorm.DB
)

// RegisterDBModel 注册数据库模型到全局变量dbModelMap中。
// 这个函数接受一个interface{}类型的参数dbModel，表示数据库模型。
// 函数的目的是将传入的数据库模型添加到全局变量dbModelMap中，
// 以便在其他地方可以访问和使用这些数据库模型。
func RegisterDBModel(dbModel interface{}) {
	// 将dbModel的地址添加到dbModelMap中。
	// 这里使用地址是因为数据库模型可能比较大，通过引用存储可以提高效率。
	dbModelMap = append(dbModelMap, &dbModel)
}

// 设置modelDB 类型
func SetModelDB(db *gorm.DB) {
	modelDB = db
}

// BuildDB 用于遍历dbModelMap中的所有数据库模型，并检查每个模型对应的表是否存在于数据库中。
// 如果表不存在，则自动迁移（创建）该表。这样可以确保数据库模式与程序中的模型保持同步。
func BuildDB() {
	// 遍历dbModelMap中的每个元素
	for _, dbModel := range dbModelMap {

		// 检查数据库中是否存在与dbModel对应的表
		tableExists := modelDB.Migrator().HasTable(dbModel)
		if !tableExists {
			// 如果表不存在，则进行自动迁移
			modelDB.AutoMigrate(dbModel)
		}
	}
}
