package steps

import (
	"context"
	"fmt"

	"github.com/pingcap/errors"
	"github.com/pingcap/test-infra/caselib/pkg/utils"
)

type compareStringSlices struct {
	more  *[]string
	less  *[]string
	extra []*string
}

func (c compareStringSlices) String() string {
	return fmt.Sprintf("Compare string slices, more: %s, less: %s, extra: %v", *c.more, *c.less, c.extra)
}

func (c compareStringSlices) Execute(ctx context.Context) error {
	if utils.CompareStringSlice(*c.more, *c.less, c.extra...) {
		return nil
	}
	return errors.New("Compare string slices failed")
}

var _ Step = &compareStringSlices{}

func CompareStringSlices(more, less *[]string, extra ...*string) *compareStringSlices {
	return &compareStringSlices{
		more,
		less,
		extra,
	}
}

func (b *Builder) CompareStringSlices(more, less *[]string, extra ...*string) *Builder {
	b.steps = append(b.steps, CompareStringSlices(more, less, extra...))
	return b
}
