package migrate

import (
	sdkmigrate "github.com/tidbcloud/aisupport/packages/sdk-go/infra/database/migrate"
	"github.com/tidbcloud/aisupport/services/jsm-syncer/models"

	"gorm.io/gorm"
)

var Migrator = sdkmigrate.NewMigrator(
	sdkmigrate.WithTable("jsm_syncer_migrations"),
	sdkmigrate.WithInitDBFunc(initDB),
)

func addRecord(name string, migrate func(*gorm.DB) error) bool {
	return Migrator.Add(name, migrate)
}

func initDB(db *gorm.DB) error {
	if err := db.AutoMigrate(
		&models.TiDBCloudOrg{},
		&models.TiDBCloudUser{},
		&models.TiDBCloudLake{},
		&models.TiDBCloudOrgMembership{},
		&models.TiDBCloudLakeMembership{},
		&models.TechnicalRoleOrgWhitelist{},
	); err != nil {
		return err
	}

	// A fresh schema records every migration as applied after initDB, so apply
	// the email-only collation here as part of initial schema creation as well.
	return makeUserEmailCaseSensitive(db)
}
