package steps

import (
	"context"
	"fmt"
	"time"

	apiresource "github.com/pingcap/test-infra/common/model/resource"
	"github.com/pingcap/test-infra/sdk/resource"
)

type allPDRestart struct {
	target   *apiresource.ResourceHandle
	duration time.Duration
}

func NewAllPDRestart(target *apiresource.ResourceHandle, duration time.Duration) *allPDRestart {
	return &allPDRestart{
		target:   target,
		duration: duration,
	}
}

func (s *allPDRestart) Execute(ctx context.Context) error {
	return NewChaosTask(
		s.target,
		resource.TiDBClusterSelectorOpts{
			TiDBClusterPDSelectorSpec: &resource.TiDBClusterPDSelectorSpec{
				All: true,
			},
		},
		&resource.FailureExperimentSpec{},
		s.duration,
	).Execute(ctx)
}

func (s *allPDRestart) String() string {
	return fmt.Sprintf("allPDRestart: duration=%+v", s.duration)
}
