package cmd

import (
	"fmt"
	"os"

	"github.com/spf13/cobra"
	"github.com/tidbcloud/dataflow-service-ng/pkg/version"

	"github.com/tidbcloud/dataflow-service-ng/internal/config"
	"github.com/tidbcloud/dataflow-service-ng/internal/core_ctx/infra/controller"
)

// Used for flags.
var cfgFile string

var rootCmd = &cobra.Command{
	Use:               "dataflow",
	CompletionOptions: cobra.CompletionOptions{DisableDefaultCmd: true},
	Version:           version.Info(),
}

func setupDI() {
	controller.InitDependencies()
}

func initGlobalConfig() {
	cobra.CheckErr(config.InitConfig(cfgFile))
}

func init() {
	rootCmd.SetVersionTemplate("{{printf \"%s\" .Version}}\n")
	cobra.OnInitialize(initGlobalConfig, setupDI)
	rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "/etc/dataflow/config.yaml", "config file path")
}

func Execute() {
	if err := rootCmd.Execute(); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
}
