package cmd

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

	"github.com/tidbcloud/dataflow-service/internal/config"
	"github.com/tidbcloud/dataflow-service/pkg/version"
)

func init() {
	cmd := &cobra.Command{
		Use:   "grpc",
		Short: "start grpc server",
		Run: func(cmd *cobra.Command, args []string) {
			version.LogInfo()
			log.L().Info("log level", zap.String("logLevel", config.Global().ServerConfig.LogLevel))
			startGrpcServer()
		},
	}
	rootCmd.AddCommand(cmd)
}

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

	serveErr := grpcServer.RunDataflowGrpcServer()
	if serveErr != nil {
		log.L().Fatal("failed to serve gRPC server", zap.Error(serveErr))
	}
	log.L().Info("gGRPC server exit now")
}
