package cmd

import (
	"fmt"
	"time"

	"github.com/spf13/cobra"
	"github.com/tidbcloud/dataflow-service/app/event_bus"
	bootstarpSerer "github.com/tidbcloud/dataflow-service/internal/cmd/bootstrap/server"
	"github.com/tidbcloud/dataflow-service/internal/event-bus/consumer"
)

func registerEventBusJobFunc(cmd *cobra.Command) {
	{
		var timeoutStr string
		suBcmd := &cobra.Command{
			Use:   "consume_dlq",
			Short: "consume messages in DLQ",
			RunE: func(cmd *cobra.Command, args []string) error {
				timeout, err := time.ParseDuration(timeoutStr)
				if err != nil {
					return fmt.Errorf("parse timeout %s error: %w", timeoutStr, err)
				}
				if _, err := bootstarpSerer.NewServer(cmd.Context(), bootstarpSerer.ServerOption{
					EnableEventBusConsumer: false,
				}); err != nil {
					return err
				}
				event_bus.RegisterHandlers()
				return consumer.RegisterDLQConsumer(timeout)
			},
		}
		cmd.Flags().StringVarP(&timeoutStr, "timeout", "", "10s", "")
		cmd.AddCommand(suBcmd)
	}
}

func init() {
	eventBusCmd := &cobra.Command{Use: "event_bus", Short: "event bus cmd"}
	eventBusCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
		return nil
	}

	registerEventBusJobFunc(eventBusCmd)
	jobCmd.AddCommand(eventBusCmd)
}
