package dbinit

import (
	"github.com/go-gormigrate/gormigrate/v2"
	"github.com/tidbcloud/metrics-server/central/config"
	"github.com/tidbcloud/metrics-server/central/db"
	"github.com/tidbcloud/metrics-server/central/migrate"
	"gorm.io/gorm"

	_ "github.com/tidbcloud/metrics-server/central/migrate/central_migrate_record"
	_ "github.com/tidbcloud/metrics-server/central/migrate/metrics_migrate_record"
)

func Initialize(cfg config.MysqlConfig, migration bool) (*gorm.DB, error) {
	handle, err := db.InitializeWithoutMigrate(cfg)
	if err != nil {
		return nil, err
	}
	if migration {
		options := gormigrate.Options{
			TableName:                 "migrations_for_metrics_biz",
			IDColumnName:              "id",
			IDColumnSize:              255,
			UseTransaction:            false,
			ValidateUnknownMigrations: false,
		}
		if err := migrate.RunCentralMigrateV2(handle, options); err != nil {
			return nil, err
		}
	}
	return handle, nil
}

func InitializeV2(cfg config.MysqlConfig, migration bool) (*gorm.DB, error) {
	handle, err := db.InitializeWithoutMigrateV2(cfg)
	if err != nil {
		return nil, err
	}
	if migration {
		options := gormigrate.Options{
			TableName:                 "migrations_for_metrics_biz",
			IDColumnName:              "id",
			IDColumnSize:              255,
			UseTransaction:            false,
			ValidateUnknownMigrations: false,
		}
		if err := migrate.RunCentralMigrateV2(handle, options); err != nil {
			return nil, err
		}
	}
	return handle, nil
}
