package cmd

import (
	"regexp"

	"github.com/dimchansky/utfbom"
	"github.com/pkg/errors"
	"github.com/spf13/cobra"

	"github.com/pingcap/test-infra/tools/tcctl/pkg/resource"
	"github.com/pingcap/test-infra/tools/tcctl/pkg/util"
)

// deleteCmd represents the delete command
var deleteCmd = &cobra.Command{
	Use:   "delete",
	Short: "Delete resources",
	Long:  `Delete resources`,
	RunE: func(cmd *cobra.Command, args []string) error {
		reader, err := util.ReadFromFile(inputFile)
		if err != nil {
			return err
		}
		sr, enc := utfbom.Skip(reader)
		util.LogInfof("Detected encoding: %s\n", enc)

		r, _ := regexp.Compile("^.+(.csv|.yaml|.yml)$")
		matched := r.FindStringSubmatch(inputFile)

		var rs []resource.Resource
		if len(matched) == 2 && matched[1] == ".csv" {
			rs, err = resource.ResourcesFromCSVStream(serverConfig, sr)
		} else {
			rs, err = resource.ResourcesFromYAMLStream(serverConfig, sr)
		}
		if err != nil {
			return errors.Wrap(err, "resource from stream error")
		}

		err = deleteFromStream(rs)
		if err != nil {
			return err
		}
		util.LogInfof("success")
		return nil
	},
}

func deleteFromStream(rs []resource.Resource) error {
	for _, r := range rs {
		err := r.Delete()
		if err != nil {
			return err
		}
	}
	return nil
}

func init() {
	rootCmd.AddCommand(deleteCmd)
}
