package cmd

import (
	"github.com/spf13/cobra"
	"github.com/tidbcloud/dataflow-service/app/container"
	bootstarpSerer "github.com/tidbcloud/dataflow-service/internal/cmd/bootstrap/server"
	"github.com/tidbcloud/dataflow-service/pkg/log"
	"go.uber.org/zap"
)

func registerFastflowJobFunc(cmd *cobra.Command) {
	{
		var dagInsID string
		suBcmd := &cobra.Command{
			Use:   "retry-dag-ins",
			Short: "retry-dag-ins",
			RunE: func(cmd *cobra.Command, args []string) error {
				if _, err := bootstarpSerer.NewServer(cmd.Context(), bootstarpSerer.ServerOption{
					EnableEventBusConsumer: false,
				}); err != nil {
					return err
				}
				ctx := log.WithTraceID(cmd.Context())
				app := container.Global()
				err := app.WorkflowModel.RetryDagIns(dagInsID)
				if err != nil {
					log.GetLogger(ctx).Error("retry dag ins error", zap.Error(err))
					return err
				}
				log.GetLogger(ctx).Info("retry dag ins success")
				return nil
			},
		}
		suBcmd.Flags().StringVarP(&dagInsID, "dagInsID", "", "", "")
		cmd.AddCommand(suBcmd)
	}

	{
		var dagInsID string
		suBcmd := &cobra.Command{
			Use:   "cancel-dag-ins",
			Short: "cancel-dag-ins",
			RunE: func(cmd *cobra.Command, args []string) error {
				if _, err := bootstarpSerer.NewServer(cmd.Context(), bootstarpSerer.ServerOption{
					EnableEventBusConsumer: false,
				}); err != nil {
					return err
				}
				ctx := log.WithTraceID(cmd.Context())
				app := container.Global()
				err := app.WorkflowModel.CancelDagIns(dagInsID)
				if err != nil {
					log.GetLogger(ctx).Error("cancel ins error", zap.Error(err))
					return err
				}
				log.GetLogger(ctx).Info("cancel dag ins success")
				return nil
			},
		}
		suBcmd.Flags().StringVarP(&dagInsID, "dagInsID", "", "", "")
		cmd.AddCommand(suBcmd)
	}
}

func init() {
	fastflowCmd := &cobra.Command{Use: "fastflow", Short: "workflow cmd"}
	fastflowCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
		return nil
	}

	registerFastflowJobFunc(fastflowCmd)
	jobCmd.AddCommand(fastflowCmd)
}
