package main

import (
	"context"
	"encoding/json"
	"fmt"

	"github.com/spf13/cobra"
	pb "github.com/tidbcloud/config-center/proto/config_center"
	"google.golang.org/grpc"
)

// clusterMetaCmd represents the cluster_config command
var clusterMetaCmd = &cobra.Command{
	Use:   "meta",
	Short: "manage cluster Metas",
	Long:  `manage cluster Metas`,
}

func init() {
	rootCmd.AddCommand(clusterMetaCmd)

	// clusterMetaCmd.AddCommand(newMetaAutoCreateCmd())
	clusterMetaCmd.AddCommand(newMetaGetCmd())
	clusterMetaCmd.AddCommand(newMetaDeleteStaleCmd())
}

func newMetaGetCmd() *cobra.Command {
	var clusterType, clusterID, region string
	cmd := &cobra.Command{
		Use:   "get --cluster-id <cluster-id>",
		Short: "get cluster Meta",
		Long:  `get cluster Meta`,
		RunE: func(cmd *cobra.Command, args []string) error {
			var opts []grpc.DialOption
			opts = append(opts, grpc.WithInsecure())
			conn, err := grpc.Dial(configCenterEndpoint, opts...)
			if err != nil {
				panic(err)
			}
			defer conn.Close()
			client := pb.NewConfigCenterServiceClient(conn)

			t, err := client.GetClusterMeta(context.Background(), &pb.GetClusterMetaRequest{
				LogicalRegion: &region,
				ClusterType:   pb.ClusterType(pb.ClusterType_value[clusterType]),
				ClusterId:     clusterID,
			})
			if err == nil {
				txt, _ := json.MarshalIndent(t, "", "    ")
				fmt.Println(string(txt))
			}
			return err
		},
	}

	cmd.Flags().StringVarP(&clusterType, "cluster-type", "T", pb.ClusterType_DEDICATED_TIDB.String(), "cluster type")
	cmd.Flags().StringVarP(&clusterID, "cluster-id", "c", "", "cluster id")
	cmd.Flags().StringVarP(&region, "region", "r", "", "logical region")

	return cmd
}
