package types

import (
	"github.com/juju/errors"
	"github.com/pingcap/schrodinger/util"
)

// Failpoint defines fail action for tidb cluster
type Failpoint struct {
	Name   string            `json:"name"`
	Points map[string]string `json:"points"`
}

// Verify verifies failpoint
func (f *Failpoint) Verify() error {
	if f.Name == "" {
		return errors.BadRequestf("failpoint name can't be empty", f.Name)
	}

	if !(f.Name == "tikv" || f.Name == "tidb" || f.Name == "pd") {
		return errors.NotValidf("failpoint name %s", f.Name)
	}

	return nil
}

// Clone clones failpoint
func (f *Failpoint) Clone() *Failpoint {
	fp := &Failpoint{}
	if err := util.Clone(fp, f); err != nil {
		return nil
	}
	return fp
}
