//go:build ignore
// +build ignore

package main

import (
	"log"
	"os"

	"entgo.io/ent/entc"
	"entgo.io/ent/entc/gen"
	"golang.org/x/tools/imports"

	"github.com/pingcap/test-infra/services/tcms/tests"
)

const genDir = "./service/store/v2/ent"

func genEnt() {
	forceReGen := os.Getenv("FORCE")
	if forceReGen != "" {
		// NOTE: delete runtime.go to force re-gen
		if err := os.Remove(genDir + "/runtime/runtime.go"); err != nil {
			if !os.IsNotExist(err) {
				log.Fatalf("failed to remove runtime.go: %v", err)
			}
		}
		if err := os.Remove(genDir + "/runtime.go"); err != nil {
			if !os.IsNotExist(err) {
				log.Fatalf("failed to remove runtime.go: %v", err)
			}
		}
	}

	// Sorting imports like `goimports -local <my-package>`.
	// See <https://github.com/ent/ent/issues/2170>.
	imports.LocalPrefix = "github.com/pingcap/test-infra"

	// Generate CRUD.
	err := entc.Generate(genDir+"/schema", &gen.Config{
		Features: []gen.Feature{
			gen.FeaturePrivacy,
			gen.FeatureSnapshot,
			gen.FeatureSchemaConfig,
			gen.FeatureLock,
			gen.FeatureModifier,
			gen.FeatureUpsert,
		},
	}, entc.Extensions())
	if err != nil {
		log.Fatalf("running ent codegen: %v", err)
	}
}

func main() {
	tests.Chdir(tests.TCMSProjectRoot())
	genEnt()
}
