package cmd

import (
	"github.com/pingcap/log"
	"github.com/spf13/cobra"
	"github.com/tidbcloud/dataflow-service/internal/cmd/bootstrap"
	"github.com/tidbcloud/dataflow-service/pkg/version"
	"go.uber.org/zap"
)

func init() {
	cmd := &cobra.Command{
		Use:   "workflow",
		Short: "start background workflow",
		Run: func(cmd *cobra.Command, args []string) {
			version.LogInfo()
			startWorkflow()
		},
	}
	rootCmd.AddCommand(cmd)
}

func startWorkflow() {
	fastflow, err := bootstrap.NewDataflowFastflow()
	if err != nil {
		log.L().Fatal("failed to setup", zap.Error(err))
		return
	}

	serveErr := fastflow.RunDataflowFastflow()
	if serveErr != nil {
		log.L().Fatal("failed to run dataflow fastflow", zap.Error(serveErr))
	}
	log.L().Info("run dataflow fastflow exit now")
}

//func startWorkflow() {
//	s := NewServer()
//	logger := log.GetLogger(context.Background())
//	if err := s.Setup(); err != nil {
//		logger.Fatal("failed to setup", zap.Error(err))
//		return
//	}
//
//	err := dag.RegisterDags()
//	if err != nil {
//		logger.Fatal("init workflow dag", zap.Error(err))
//		return
//	}
//
//	// init worker
//	if err := fastflow.Init(&fastflow.InitialOption{
//		Keeper:            mod.GetKeeper(),
//		Store:             mod.GetStore(),
//		ParserWorkersCnt:  100,
//		ExecutorWorkerCnt: 1000,
//	}); err != nil {
//		logger.Fatal("init workflow failed", zap.Error(err))
//		return
//	}
//
//	eg := errgroup.Group{}
//	eg.Go(func() error {
//		mux := http.NewServeMux()
//		mux.Handle("/metrics", exporter.HttpHandler())
//		mux.Handle("/healthz", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
//			w.WriteHeader(http.StatusOK)
//		}))
//		return http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", config.Global().ServerConfig.MetricsPort), mux)
//	})
//	if serveErr := eg.Wait(); serveErr != nil {
//		logger.Fatal("failed to serve server", zap.Error(serveErr))
//	}
//	logger.Info("workflow exit now")
//}
