package workspace

import (
	"fmt"

	"github.com/spf13/cobra"

	"github.com/tidbcloud/aisupport/apps/cli/ticket-manager/common"
	wsapi "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/api/ticket-manager/workspace"
	wsent "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/entity/ticket-manager/workspace"
	sliceutil "github.com/tidbcloud/aisupport/packages/sdk-go/infra/utils/container/slice"
)

func newListCommand() *cobra.Command {
	var member string

	cmd := &cobra.Command{
		Use:   "list",
		Short: "List workspaces",
		RunE: func(cmd *cobra.Command, args []string) error {
			var result wsapi.ListWorkspacesResponse
			req := common.Client.R().SetResult(&result)
			if member != "" {
				req.SetQueryParam("member", member)
			}

			if _, err := req.Get("/workspace/workspaces"); err != nil {
				return fmt.Errorf("list workspaces: %w", err)
			}

			return common.Printer.PrintList(sliceutil.TransformSlice(result.Workspaces, func(workspace *wsent.Workspace) any {
				return workspace
			}))
		},
	}

	cmd.Flags().StringVar(&member, "member", "", "Filter workspaces by member")

	return cmd
}
