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

package mocks

import (
	msg "github.com/innogames/slack-bot/v2/bot/msg"
	mock "github.com/stretchr/testify/mock"

	slack "github.com/slack-go/slack"

	util "github.com/innogames/slack-bot/v2/bot/util"
)

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

// AddReaction provides a mock function with given fields: reaction, ref
func (_m *SlackClient) AddReaction(reaction util.Reaction, ref msg.Ref) {
	_m.Called(reaction, ref)
}

// GetConversationHistory provides a mock function with given fields: _a0
func (_m *SlackClient) GetConversationHistory(_a0 *slack.GetConversationHistoryParameters) (*slack.GetConversationHistoryResponse, error) {
	ret := _m.Called(_a0)

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

	var r0 *slack.GetConversationHistoryResponse
	var r1 error
	if rf, ok := ret.Get(0).(func(*slack.GetConversationHistoryParameters) (*slack.GetConversationHistoryResponse, error)); ok {
		return rf(_a0)
	}
	if rf, ok := ret.Get(0).(func(*slack.GetConversationHistoryParameters) *slack.GetConversationHistoryResponse); ok {
		r0 = rf(_a0)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*slack.GetConversationHistoryResponse)
		}
	}

	if rf, ok := ret.Get(1).(func(*slack.GetConversationHistoryParameters) error); ok {
		r1 = rf(_a0)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GetReactions provides a mock function with given fields: item, params
func (_m *SlackClient) GetReactions(item slack.ItemRef, params slack.GetReactionsParameters) ([]slack.ItemReaction, error) {
	ret := _m.Called(item, params)

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

	var r0 []slack.ItemReaction
	var r1 error
	if rf, ok := ret.Get(0).(func(slack.ItemRef, slack.GetReactionsParameters) ([]slack.ItemReaction, error)); ok {
		return rf(item, params)
	}
	if rf, ok := ret.Get(0).(func(slack.ItemRef, slack.GetReactionsParameters) []slack.ItemReaction); ok {
		r0 = rf(item, params)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).([]slack.ItemReaction)
		}
	}

	if rf, ok := ret.Get(1).(func(slack.ItemRef, slack.GetReactionsParameters) error); ok {
		r1 = rf(item, params)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// GetThreadMessages provides a mock function with given fields: ref
func (_m *SlackClient) GetThreadMessages(ref msg.Ref) ([]slack.Message, error) {
	ret := _m.Called(ref)

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

	var r0 []slack.Message
	var r1 error
	if rf, ok := ret.Get(0).(func(msg.Ref) ([]slack.Message, error)); ok {
		return rf(ref)
	}
	if rf, ok := ret.Get(0).(func(msg.Ref) []slack.Message); ok {
		r0 = rf(ref)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).([]slack.Message)
		}
	}

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

	return r0, r1
}

// GetUserPresence provides a mock function with given fields: user
func (_m *SlackClient) GetUserPresence(user string) (*slack.UserPresence, error) {
	ret := _m.Called(user)

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

	var r0 *slack.UserPresence
	var r1 error
	if rf, ok := ret.Get(0).(func(string) (*slack.UserPresence, error)); ok {
		return rf(user)
	}
	if rf, ok := ret.Get(0).(func(string) *slack.UserPresence); ok {
		r0 = rf(user)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*slack.UserPresence)
		}
	}

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

	return r0, r1
}

// PinMessage provides a mock function with given fields: channel, timestamp
func (_m *SlackClient) PinMessage(channel string, timestamp string) error {
	ret := _m.Called(channel, timestamp)

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

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

	return r0
}

// RemoveReaction provides a mock function with given fields: reaction, ref
func (_m *SlackClient) RemoveReaction(reaction util.Reaction, ref msg.Ref) {
	_m.Called(reaction, ref)
}

// ReplyError provides a mock function with given fields: ref, err
func (_m *SlackClient) ReplyError(ref msg.Ref, err error) {
	_m.Called(ref, err)
}

// SendBlockMessage provides a mock function with given fields: ref, blocks, options
func (_m *SlackClient) SendBlockMessage(ref msg.Ref, blocks []slack.Block, options ...slack.MsgOption) string {
	_va := make([]interface{}, len(options))
	for _i := range options {
		_va[_i] = options[_i]
	}
	var _ca []interface{}
	_ca = append(_ca, ref, blocks)
	_ca = append(_ca, _va...)
	ret := _m.Called(_ca...)

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

	var r0 string
	if rf, ok := ret.Get(0).(func(msg.Ref, []slack.Block, ...slack.MsgOption) string); ok {
		r0 = rf(ref, blocks, options...)
	} else {
		r0 = ret.Get(0).(string)
	}

	return r0
}

// SendBlockMessageToUser provides a mock function with given fields: user, blocks, options
func (_m *SlackClient) SendBlockMessageToUser(user string, blocks []slack.Block, options ...slack.MsgOption) string {
	_va := make([]interface{}, len(options))
	for _i := range options {
		_va[_i] = options[_i]
	}
	var _ca []interface{}
	_ca = append(_ca, user, blocks)
	_ca = append(_ca, _va...)
	ret := _m.Called(_ca...)

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

	var r0 string
	if rf, ok := ret.Get(0).(func(string, []slack.Block, ...slack.MsgOption) string); ok {
		r0 = rf(user, blocks, options...)
	} else {
		r0 = ret.Get(0).(string)
	}

	return r0
}

// SendEphemeralMessage provides a mock function with given fields: ref, text, options
func (_m *SlackClient) SendEphemeralMessage(ref msg.Ref, text string, options ...slack.MsgOption) {
	_va := make([]interface{}, len(options))
	for _i := range options {
		_va[_i] = options[_i]
	}
	var _ca []interface{}
	_ca = append(_ca, ref, text)
	_ca = append(_ca, _va...)
	_m.Called(_ca...)
}

// SendMessage provides a mock function with given fields: ref, text, options
func (_m *SlackClient) SendMessage(ref msg.Ref, text string, options ...slack.MsgOption) string {
	_va := make([]interface{}, len(options))
	for _i := range options {
		_va[_i] = options[_i]
	}
	var _ca []interface{}
	_ca = append(_ca, ref, text)
	_ca = append(_ca, _va...)
	ret := _m.Called(_ca...)

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

	var r0 string
	if rf, ok := ret.Get(0).(func(msg.Ref, string, ...slack.MsgOption) string); ok {
		r0 = rf(ref, text, options...)
	} else {
		r0 = ret.Get(0).(string)
	}

	return r0
}

// SendToUser provides a mock function with given fields: user, text
func (_m *SlackClient) SendToUser(user string, text string) {
	_m.Called(user, text)
}

// UploadFile provides a mock function with given fields: params
func (_m *SlackClient) UploadFile(params slack.UploadFileV2Parameters) (*slack.FileSummary, error) {
	ret := _m.Called(params)

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

	var r0 *slack.FileSummary
	var r1 error
	if rf, ok := ret.Get(0).(func(slack.UploadFileV2Parameters) (*slack.FileSummary, error)); ok {
		return rf(params)
	}
	if rf, ok := ret.Get(0).(func(slack.UploadFileV2Parameters) *slack.FileSummary); ok {
		r0 = rf(params)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*slack.FileSummary)
		}
	}

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

	return r0, r1
}

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

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

	return mock
}
