package cmd

import (
	"github.com/spf13/cobra"
	bootstarpSerer "github.com/tidbcloud/dataflow-service/internal/cmd/bootstrap/server"
	"github.com/tidbcloud/dataflow-service/internal/jobs"
	"github.com/tidbcloud/dataflow-service/pkg/log"
)

func registerSKUJobFunc(cmd *cobra.Command) {
	{
		cmd2 := &cobra.Command{
			Use:   "list-backup-sku",
			Short: "list-backup-sku",
			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())
				return jobs.ListAllBackupSKU(ctx)
			},
		}
		cmd.AddCommand(cmd2)
	}

	{
		var cloudProvider string
		var region string
		var price string
		cmd2 := &cobra.Command{
			Use:   "add-dual-region-backup-storage-sku",
			Short: "add-dual-region-backup-storage-sku",
			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())
				return jobs.AddDualRegionBackupStorageSku(ctx, cloudProvider, region, price)
			},
		}
		cmd2.Flags().StringVarP(&cloudProvider, "cloud_provider", "", "", "")
		cmd2.Flags().StringVarP(&region, "region", "", "", "")
		cmd2.Flags().StringVarP(&price, "price", "", "", "")
		cmd.AddCommand(cmd2)
	}

	{
		var cloudProvider string
		var region string
		var price string
		cmd2 := &cobra.Command{
			Use:   "add-dual-region-backup-replication-sku",
			Short: "add-dual-region-backup-replication-sku",
			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())
				return jobs.AddDualRegionBackupReplicationSku(ctx, cloudProvider, region, price)
			},
		}
		cmd2.Flags().StringVarP(&cloudProvider, "cloud_provider", "", "", "")
		cmd2.Flags().StringVarP(&region, "region", "", "", "")
		cmd2.Flags().StringVarP(&price, "price", "", "", "")
		cmd.AddCommand(cmd2)
	}
}

func init() {
	skuCmd := &cobra.Command{Use: "sku", Short: "sku"}

	registerSKUJobFunc(skuCmd)
	jobCmd.AddCommand(skuCmd)
}
