// Code generated by mockery v2.53.4. DO NOT EDIT.

package mocks

import (
	decision "adg/internal/domain/decision"

	mock "github.com/stretchr/testify/mock"
)

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

// AddExisting provides a mock function with given fields: sourceModelPath, targetModelPath, _a2, content, increment
func (_m *DecisionService) AddExisting(sourceModelPath string, targetModelPath string, _a2 *decision.Decision, content *decision.DecisionContent, increment int) (*decision.Decision, error) {
	ret := _m.Called(sourceModelPath, targetModelPath, _a2, content, increment)

	if len(ret) == 0 {
		panic("no return value specified for AddExisting")
	}

	var r0 *decision.Decision
	var r1 error
	if rf, ok := ret.Get(0).(func(string, string, *decision.Decision, *decision.DecisionContent, int) (*decision.Decision, error)); ok {
		return rf(sourceModelPath, targetModelPath, _a2, content, increment)
	}
	if rf, ok := ret.Get(0).(func(string, string, *decision.Decision, *decision.DecisionContent, int) *decision.Decision); ok {
		r0 = rf(sourceModelPath, targetModelPath, _a2, content, increment)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*decision.Decision)
		}
	}

	if rf, ok := ret.Get(1).(func(string, string, *decision.Decision, *decision.DecisionContent, int) error); ok {
		r1 = rf(sourceModelPath, targetModelPath, _a2, content, increment)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// AddNew provides a mock function with given fields: modelPath, title
func (_m *DecisionService) AddNew(modelPath string, title string) (*decision.Decision, error) {
	ret := _m.Called(modelPath, title)

	if len(ret) == 0 {
		panic("no return value specified for AddNew")
	}

	var r0 *decision.Decision
	var r1 error
	if rf, ok := ret.Get(0).(func(string, string) (*decision.Decision, error)); ok {
		return rf(modelPath, title)
	}
	if rf, ok := ret.Get(0).(func(string, string) *decision.Decision); ok {
		r0 = rf(modelPath, title)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*decision.Decision)
		}
	}

	if rf, ok := ret.Get(1).(func(string, string) error); ok {
		r1 = rf(modelPath, title)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// Comment provides a mock function with given fields: modelPath, _a1, author, comment
func (_m *DecisionService) Comment(modelPath string, _a1 *decision.Decision, author string, comment string) error {
	ret := _m.Called(modelPath, _a1, author, comment)

	if len(ret) == 0 {
		panic("no return value specified for Comment")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(string, *decision.Decision, string, string) error); ok {
		r0 = rf(modelPath, _a1, author, comment)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// Copy provides a mock function with given fields: sourceModelPath, targetPath, decisionID
func (_m *DecisionService) Copy(sourceModelPath string, targetPath string, decisionID string) error {
	ret := _m.Called(sourceModelPath, targetPath, decisionID)

	if len(ret) == 0 {
		panic("no return value specified for Copy")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(string, string, string) error); ok {
		r0 = rf(sourceModelPath, targetPath, decisionID)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// Decide provides a mock function with given fields: modelPath, _a1, option, rationale, enforceOption
func (_m *DecisionService) Decide(modelPath string, _a1 *decision.Decision, option string, rationale string, enforceOption bool) error {
	ret := _m.Called(modelPath, _a1, option, rationale, enforceOption)

	if len(ret) == 0 {
		panic("no return value specified for Decide")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(string, *decision.Decision, string, string, bool) error); ok {
		r0 = rf(modelPath, _a1, option, rationale, enforceOption)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// Edit provides a mock function with given fields: modelPath, _a1, question, options, criteria
func (_m *DecisionService) Edit(modelPath string, _a1 *decision.Decision, question *string, options *[]string, criteria *string) error {
	ret := _m.Called(modelPath, _a1, question, options, criteria)

	if len(ret) == 0 {
		panic("no return value specified for Edit")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(string, *decision.Decision, *string, *[]string, *string) error); ok {
		r0 = rf(modelPath, _a1, question, options, criteria)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// FilterDecisions provides a mock function with given fields: decisions, filters
func (_m *DecisionService) FilterDecisions(decisions []decision.Decision, filters map[string][]string) ([]decision.Decision, error) {
	ret := _m.Called(decisions, filters)

	if len(ret) == 0 {
		panic("no return value specified for FilterDecisions")
	}

	var r0 []decision.Decision
	var r1 error
	if rf, ok := ret.Get(0).(func([]decision.Decision, map[string][]string) ([]decision.Decision, error)); ok {
		return rf(decisions, filters)
	}
	if rf, ok := ret.Get(0).(func([]decision.Decision, map[string][]string) []decision.Decision); ok {
		r0 = rf(decisions, filters)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).([]decision.Decision)
		}
	}

	if rf, ok := ret.Get(1).(func([]decision.Decision, map[string][]string) error); ok {
		r1 = rf(decisions, filters)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GetAllDecisions provides a mock function with given fields: modelPath
func (_m *DecisionService) GetAllDecisions(modelPath string) ([]decision.Decision, error) {
	ret := _m.Called(modelPath)

	if len(ret) == 0 {
		panic("no return value specified for GetAllDecisions")
	}

	var r0 []decision.Decision
	var r1 error
	if rf, ok := ret.Get(0).(func(string) ([]decision.Decision, error)); ok {
		return rf(modelPath)
	}
	if rf, ok := ret.Get(0).(func(string) []decision.Decision); ok {
		r0 = rf(modelPath)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).([]decision.Decision)
		}
	}

	if rf, ok := ret.Get(1).(func(string) error); ok {
		r1 = rf(modelPath)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GetDecisionByID provides a mock function with given fields: modelPath, id
func (_m *DecisionService) GetDecisionByID(modelPath string, id string) (*decision.Decision, error) {
	ret := _m.Called(modelPath, id)

	if len(ret) == 0 {
		panic("no return value specified for GetDecisionByID")
	}

	var r0 *decision.Decision
	var r1 error
	if rf, ok := ret.Get(0).(func(string, string) (*decision.Decision, error)); ok {
		return rf(modelPath, id)
	}
	if rf, ok := ret.Get(0).(func(string, string) *decision.Decision); ok {
		r0 = rf(modelPath, id)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*decision.Decision)
		}
	}

	if rf, ok := ret.Get(1).(func(string, string) error); ok {
		r1 = rf(modelPath, id)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GetDecisionByTitle provides a mock function with given fields: modelPath, title
func (_m *DecisionService) GetDecisionByTitle(modelPath string, title string) (*decision.Decision, error) {
	ret := _m.Called(modelPath, title)

	if len(ret) == 0 {
		panic("no return value specified for GetDecisionByTitle")
	}

	var r0 *decision.Decision
	var r1 error
	if rf, ok := ret.Get(0).(func(string, string) (*decision.Decision, error)); ok {
		return rf(modelPath, title)
	}
	if rf, ok := ret.Get(0).(func(string, string) *decision.Decision); ok {
		r0 = rf(modelPath, title)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*decision.Decision)
		}
	}

	if rf, ok := ret.Get(1).(func(string, string) error); ok {
		r1 = rf(modelPath, title)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GetDecisionContent provides a mock function with given fields: modelPath, decisionID
func (_m *DecisionService) GetDecisionContent(modelPath string, decisionID string) (*decision.DecisionContent, error) {
	ret := _m.Called(modelPath, decisionID)

	if len(ret) == 0 {
		panic("no return value specified for GetDecisionContent")
	}

	var r0 *decision.DecisionContent
	var r1 error
	if rf, ok := ret.Get(0).(func(string, string) (*decision.DecisionContent, error)); ok {
		return rf(modelPath, decisionID)
	}
	if rf, ok := ret.Get(0).(func(string, string) *decision.DecisionContent); ok {
		r0 = rf(modelPath, decisionID)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*decision.DecisionContent)
		}
	}

	if rf, ok := ret.Get(1).(func(string, string) error); ok {
		r1 = rf(modelPath, decisionID)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// Link provides a mock function with given fields: modelPath, source, target, forwardTag, reverseTag
func (_m *DecisionService) Link(modelPath string, source *decision.Decision, target *decision.Decision, forwardTag string, reverseTag string) error {
	ret := _m.Called(modelPath, source, target, forwardTag, reverseTag)

	if len(ret) == 0 {
		panic("no return value specified for Link")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(string, *decision.Decision, *decision.Decision, string, string) error); ok {
		r0 = rf(modelPath, source, target, forwardTag, reverseTag)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// Revise provides a mock function with given fields: modelPath, original
func (_m *DecisionService) Revise(modelPath string, original *decision.Decision) (*decision.Decision, error) {
	ret := _m.Called(modelPath, original)

	if len(ret) == 0 {
		panic("no return value specified for Revise")
	}

	var r0 *decision.Decision
	var r1 error
	if rf, ok := ret.Get(0).(func(string, *decision.Decision) (*decision.Decision, error)); ok {
		return rf(modelPath, original)
	}
	if rf, ok := ret.Get(0).(func(string, *decision.Decision) *decision.Decision); ok {
		r0 = rf(modelPath, original)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*decision.Decision)
		}
	}

	if rf, ok := ret.Get(1).(func(string, *decision.Decision) error); ok {
		r1 = rf(modelPath, original)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// Tag provides a mock function with given fields: modelPath, _a1, tag
func (_m *DecisionService) Tag(modelPath string, _a1 *decision.Decision, tag string) error {
	ret := _m.Called(modelPath, _a1, tag)

	if len(ret) == 0 {
		panic("no return value specified for Tag")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(string, *decision.Decision, string) error); ok {
		r0 = rf(modelPath, _a1, tag)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// NewDecisionService creates a new instance of DecisionService. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewDecisionService(t interface {
	mock.TestingT
	Cleanup(func())
}) *DecisionService {
	mock := &DecisionService{}
	mock.Mock.Test(t)

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}
