package userspace import ( "fmt" "strconv" "strings" "github.com/chzyer/readline" "github.com/spf13/cobra" cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1" clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types" "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd" ) func init() { cmd := cobra.Command{ Use: "delete", Short: "delete a cloud storage", Run: func(c *cobra.Command, args []string) { ctx := cmd.GetCmdCtx(c) delete(c, ctx) }, } UserSpaceCmd.AddCommand(&cmd) } func delete(c *cobra.Command, ctx *cmd.CommandContext) { rl, err := readline.New("> ") if err != nil { fmt.Printf("\033[31m初始化命令行失败: %v\033[0m\n", err) return } defer rl.Close() fmt.Printf("\033[1;36m请选择删除依据: \033[0m\n") options := []string{"ID", "Name"} for i, option := range options { fmt.Printf("\033[33m%d. %s\033[0m\n", i+1, option) } rl.SetPrompt("\033[36m> \033[0m") line, err := rl.Readline() if err != nil { return } var userSpace clitypes.UserSpace trimmed := strings.TrimSpace(line) switch trimmed { case "1": rl.SetPrompt("\033[36m请输入云存储ID(ID): \033[0m") idInput, err := rl.Readline() if err != nil || idInput == "" { return } id, err := strconv.ParseInt(strings.TrimSpace(idInput), 10, 64) if err != nil { fmt.Printf("\033[31mID 格式错误: %v\033[0m\n", err) return } resp, err := ctx.Client.UserSpace().Get(cliapi.UserSpaceGet{ UserSpaceID: clitypes.UserSpaceID(id), }) if err != nil { fmt.Printf("\033[31m保存配置失败: %v\033[0m", err) return } userSpace = resp.UserSpace case "2": rl.SetPrompt("\033[36m请输入云存储名称(Name): \033[0m") nameInput, err := rl.Readline() if err != nil || nameInput == "" { fmt.Println("\033[31m输入已取消\033[0m") return } name := strings.TrimSpace(nameInput) resp, err := ctx.Client.UserSpace().GetByName(cliapi.UserSpaceGetByName{ Name: name, }) if err != nil { fmt.Printf("\033[31m保存配置失败: %v\033[0m", err) return } userSpace = resp.UserSpace default: fmt.Printf("\033[31m错误: 无效选项 '%s',请输入序号!\033[0m\n", line) } fmt.Println("\n\033[1;36m找到云存储:\033[0m") fmt.Printf("\033[1;36mID:%d 名称:%s 类型:%s\033[0m\n", userSpace.UserSpaceID, userSpace.Name, userSpace.Storage.GetStorageType()) rl.SetPrompt("\033[31m确认删除?(y/n): \033[0m") confirm, err := rl.Readline() if err != nil || strings.ToLower(strings.TrimSpace(confirm)) != "y" { return } _, err = ctx.Client.UserSpace().Delete(cliapi.UserSpaceDelete{ UserSpaceID: userSpace.UserSpaceID, }) if err != nil { fmt.Printf("\033[31m删除失败: %v\033[0m\n", err) return } fmt.Printf("\n\033[32m删除成功: %s\033[0m\n", userSpace.Name) }