package engine

import (
	"context"
	"fmt"

	"github.com/tidbcloud/infra-provider/infra-inspector/api"
	"github.com/tidbcloud/infra-provider/infra-inspector/pkg/inspect/lister"

	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)

var (
	_ Engine = &FakeEngine{}
)

type FakeEngine struct {
	ValidateFunc func(context.Context, lister.ResourceLister, *unstructured.Unstructured) (*api.Violation, error)
}

func (e *FakeEngine) Validate(ctx context.Context, lister lister.ResourceLister, resource *unstructured.Unstructured) (*api.Violation, error) {
	if e.ValidateFunc == nil {
		return nil, fmt.Errorf("ListFunc is not set")
	}

	return e.ValidateFunc(ctx, lister, resource)
}

func (e *FakeEngine) SetResults(violation *api.Violation, err error) {
	e.ValidateFunc = func(_ context.Context, _ lister.ResourceLister, _ *unstructured.Unstructured) (*api.Violation, error) {
		return violation, err
	}
}
