package host

import (
	"fmt"

	"github.com/pingcap/errors"
	"github.com/pingcap/log"
	"github.com/pingcap/test-infra/sdk/resource"
)

type McHost struct{ Host }

type McCopyOpts struct {
	Src     string `json:"src"`
	Dst     string `json:"dst"`
	Timeout string `json:"timeout"`
}

func (m *McHost) Copy(opts *McCopyOpts) error {
	cmd := fmt.Sprintf("mc cp --recursive \"%s\" \"%s\"", opts.Src, opts.Dst)
	output, err := m.ExecCmd(cmd, opts.Timeout)
	if err != nil {
		return err
	}
	if output.ExitCode != 0 {
		log.Info("mc cp failed")
		return errors.New("mc cp failed")
	}
	return nil
}

func NewMcHost(res resource.WorkloadNode) *McHost {
	return &McHost{Host{res}}
}

type McRmOpts struct {
	Path    string `json:"path"`
	Timeout string `json:"timeout"`
}

func (m *McHost) Rm(opts *McRmOpts) error {
	cmd := fmt.Sprintf("mc rm --recursive --force '%s'", opts.Path)
	output, err := m.ExecCmd(cmd, opts.Timeout)
	if err != nil {
		return errors.Trace(err)
	}
	if output.ExitCode != 0 {
		log.Error("mc rm failed")
		return errors.New("mc rm failed")
	}
	return nil
}
