package db

import (
	"fmt"
	"net/url"

	"github.com/golang-migrate/migrate/v4"
	_ "github.com/golang-migrate/migrate/v4/database/mysql"
	_ "github.com/golang-migrate/migrate/v4/source/file"
	"github.com/tidbcloud/config-center/internal/config"
)

func Migrate(c config.DatabaseConfig) {
	encodedPassword := url.QueryEscape(c.Password)
	m, err := migrate.New("file://migration",
		fmt.Sprintf("mysql://%s:%s@tcp(%s:%d)/%s?charset=utf8mb4", c.User, encodedPassword, c.Host, c.Port, c.Database))
	if err != nil {
		panic(err)
	}

	if err := m.Up(); err != nil && err != migrate.ErrNoChange {
		panic(err)
	}
}
