//go:build ignore
// +build ignore

package main

import (
	"bytes"
	"context"
	"fmt"
	"log"
	"testing"

	"entgo.io/ent/dialect/sql/schema"
	"github.com/fatih/color"
	_ "github.com/go-sql-driver/mysql"

	"github.com/pingcap/test-infra/services/tcms/service/store/v2/ent"
	"github.com/pingcap/test-infra/services/tcms/tests"
	"github.com/pingcap/test-infra/services/tcms/tests/configtest"
)

func genMigration(dsn string) {
	client, err := ent.Open("mysql", dsn)
	if err != nil {
		log.Fatalf("failed connecting to mysql: %v", err)
	}
	defer client.Close()

	// Dump migration changes to stdout.
	b := &bytes.Buffer{}
	if err := client.Schema.WriteTo(context.Background(), b,
		schema.WithForeignKeys(false),
		schema.WithDropIndex(true),
		schema.WithDropColumn(true),
		schema.WithAtlas(true),
	); err != nil {
		log.Fatalf("failed printing schema changes: %v", err)
	}
	sqls := b.String()
	if len(sqls) > len("BEGIN;\nCOMMIT;\n") {
		fmt.Println()
		_, _ = color.New(color.FgCyan).Add(color.Underline).Println("Successfully generated migration changes. Don't forget to add following SQLs to a new migration file under `db/migrations` and modify `db/schema.sql`:")
		fmt.Println()
		color.Green("# Generated by entc\n" + sqls)
		fmt.Println()
	}
}

func main() {
	t := &testing.T{}
	cfg := configtest.NewTestConfig(t)
	cfg.Parallel = false

	tests.Setup(t, cfg)
	genMigration(cfg.DSN)
}
