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

package mocks

import (
	common "github.com/berachain/beacon-kit/primitives/common"
	mock "github.com/stretchr/testify/mock"

	state "github.com/berachain/beacon-kit/state-transition/core/state"

	transition "github.com/berachain/beacon-kit/primitives/transition"

	types "github.com/berachain/beacon-kit/consensus-types/types"
)

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

type GenesisStateProcessor_Expecter struct {
	mock *mock.Mock
}

func (_m *GenesisStateProcessor) EXPECT() *GenesisStateProcessor_Expecter {
	return &GenesisStateProcessor_Expecter{mock: &_m.Mock}
}

// InitializeBeaconStateFromEth1 provides a mock function with given fields: st, deposits, execPayloadHeader, genesisVersion
func (_m *GenesisStateProcessor) InitializeBeaconStateFromEth1(st *state.StateDB, deposits types.Deposits, execPayloadHeader *types.ExecutionPayloadHeader, genesisVersion common.Version) (transition.ValidatorUpdates, error) {
	ret := _m.Called(st, deposits, execPayloadHeader, genesisVersion)

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

	var r0 transition.ValidatorUpdates
	var r1 error
	if rf, ok := ret.Get(0).(func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) (transition.ValidatorUpdates, error)); ok {
		return rf(st, deposits, execPayloadHeader, genesisVersion)
	}
	if rf, ok := ret.Get(0).(func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) transition.ValidatorUpdates); ok {
		r0 = rf(st, deposits, execPayloadHeader, genesisVersion)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(transition.ValidatorUpdates)
		}
	}

	if rf, ok := ret.Get(1).(func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) error); ok {
		r1 = rf(st, deposits, execPayloadHeader, genesisVersion)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GenesisStateProcessor_InitializeBeaconStateFromEth1_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'InitializeBeaconStateFromEth1'
type GenesisStateProcessor_InitializeBeaconStateFromEth1_Call struct {
	*mock.Call
}

// InitializeBeaconStateFromEth1 is a helper method to define mock.On call
//   - st *state.StateDB
//   - deposits types.Deposits
//   - execPayloadHeader *types.ExecutionPayloadHeader
//   - genesisVersion common.Version
func (_e *GenesisStateProcessor_Expecter) InitializeBeaconStateFromEth1(st interface{}, deposits interface{}, execPayloadHeader interface{}, genesisVersion interface{}) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	return &GenesisStateProcessor_InitializeBeaconStateFromEth1_Call{Call: _e.mock.On("InitializeBeaconStateFromEth1", st, deposits, execPayloadHeader, genesisVersion)}
}

func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) Run(run func(st *state.StateDB, deposits types.Deposits, execPayloadHeader *types.ExecutionPayloadHeader, genesisVersion common.Version)) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	_c.Call.Run(func(args mock.Arguments) {
		run(args[0].(*state.StateDB), args[1].(types.Deposits), args[2].(*types.ExecutionPayloadHeader), args[3].(common.Version))
	})
	return _c
}

func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) Return(_a0 transition.ValidatorUpdates, _a1 error) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	_c.Call.Return(_a0, _a1)
	return _c
}

func (_c *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call) RunAndReturn(run func(*state.StateDB, types.Deposits, *types.ExecutionPayloadHeader, common.Version) (transition.ValidatorUpdates, error)) *GenesisStateProcessor_InitializeBeaconStateFromEth1_Call {
	_c.Call.Return(run)
	return _c
}

// NewGenesisStateProcessor creates a new instance of GenesisStateProcessor. 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 NewGenesisStateProcessor(t interface {
	mock.TestingT
	Cleanup(func())
}) *GenesisStateProcessor {
	mock := &GenesisStateProcessor{}
	mock.Mock.Test(t)

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

	return mock
}
