package mocks

import (
	"context"

	"github.com/stretchr/testify/mock"

	"github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model"

	"github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
)

// ProbeService is an autogenerated mock type for the Service type
type ProbeService struct {
	mock.Mock
}

// AddProbe provides a mock function with given fields: ctx, probe, projectID
func (_m *ProbeService) AddProbe(ctx context.Context, probe model.ProbeRequest, projectID string) (*model.Probe, error) {
	ret := _m.Called(ctx, probe, projectID)
	return ret.Get(0).(*model.Probe), ret.Error(1)
}

// DeleteProbe provides a mock function with given fields: ctx, probeName, projectID
func (_m *ProbeService) DeleteProbe(ctx context.Context, probeName string, projectID string) (bool, error) {
	ret := _m.Called(ctx, probeName, projectID)
	return ret.Get(0).(bool), ret.Error(1)
}

// GenerateCronExperimentManifestWithProbes provides a mock function with given fields: manifest, projectID
func (_m *ProbeService) GenerateCronExperimentManifestWithProbes(manifest string, projectID string) (v1alpha1.CronWorkflow, error) {
	ret := _m.Called(manifest, projectID)
	return ret.Get(0).(v1alpha1.CronWorkflow), ret.Error(1)
}

// GenerateExperimentManifestWithProbes provides a mock function with given fields: manifest, projectID
func (_m *ProbeService) GenerateExperimentManifestWithProbes(manifest string, projectID string) (v1alpha1.Workflow, error) {
	ret := _m.Called(manifest, projectID)
	return ret.Get(0).(v1alpha1.Workflow), ret.Error(1)
}

// GetProbe provides a mock function with given fields: ctx, probeName, projectID
func (_m *ProbeService) GetProbe(ctx context.Context, probeName string, projectID string) (*model.Probe, error) {
	ret := _m.Called(ctx, probeName, projectID)
	return ret.Get(0).(*model.Probe), ret.Error(1)
}

// GetProbeReference provides a mock function with given fields: ctx, probeName, projectID
func (_m *ProbeService) GetProbeReference(ctx context.Context, probeName string, projectID string) (*model.GetProbeReferenceResponse, error) {
	ret := _m.Called(ctx, probeName, projectID)
	return ret.Get(0).(*model.GetProbeReferenceResponse), ret.Error(1)
}

// GetProbeYAMLData provides a mock function with given fields: ctx, probe, projectID
func (_m *ProbeService) GetProbeYAMLData(ctx context.Context, probe model.GetProbeYAMLRequest, projectID string) (string, error) {
	ret := _m.Called(ctx, probe, projectID)
	return ret.Get(0).(string), ret.Error(1)
}

// ListProbes provides a mock function with given fields: ctx, probeNames, infrastructureType, filter, projectID
func (_m *ProbeService) ListProbes(ctx context.Context, probeNames []string, infrastructureType *model.InfrastructureType, filter *model.ProbeFilterInput, projectID string) ([]*model.Probe, error) {
	ret := _m.Called(ctx, probeNames, infrastructureType, filter, projectID)
	return ret.Get(0).([]*model.Probe), ret.Error(1)
}

// UpdateProbe provides a mock function with given fields: ctx, probe, projectID
func (_m *ProbeService) UpdateProbe(ctx context.Context, probe model.ProbeRequest, projectID string) (string, error) {
	ret := _m.Called(ctx, probe, projectID)
	return ret.Get(0).(string), ret.Error(1)
}

// ValidateUniqueProbe provides a mock function with given fields: ctx, probeName, projectID
func (_m *ProbeService) ValidateUniqueProbe(ctx context.Context, probeName string, projectID string) (bool, error) {
	ret := _m.Called(ctx, probeName, projectID)
	return ret.Get(0).(bool), ret.Error(1)
}
