// This file was generated by counterfeiter
package fakes

import (
	"sync"

	"github.com/cloudfoundry/dropsonde/metrics"
)

type MetricBatcher struct {
	BatchIncrementCounterStub        func(name string)
	batchIncrementCounterMutex       sync.RWMutex
	batchIncrementCounterArgsForCall []struct {
		name string
	}
	BatchAddCounterStub        func(name string, delta uint64)
	batchAddCounterMutex       sync.RWMutex
	batchAddCounterArgsForCall []struct {
		name  string
		delta uint64
	}
	CloseStub        func()
	closeMutex       sync.RWMutex
	closeArgsForCall []struct{}
	invocations      map[string][][]interface{}
	invocationsMutex sync.RWMutex
}

func (fake *MetricBatcher) BatchIncrementCounter(name string) {
	fake.batchIncrementCounterMutex.Lock()
	fake.batchIncrementCounterArgsForCall = append(fake.batchIncrementCounterArgsForCall, struct {
		name string
	}{name})
	fake.recordInvocation("BatchIncrementCounter", []interface{}{name})
	fake.batchIncrementCounterMutex.Unlock()
	if fake.BatchIncrementCounterStub != nil {
		fake.BatchIncrementCounterStub(name)
	}
}

func (fake *MetricBatcher) BatchIncrementCounterCallCount() int {
	fake.batchIncrementCounterMutex.RLock()
	defer fake.batchIncrementCounterMutex.RUnlock()
	return len(fake.batchIncrementCounterArgsForCall)
}

func (fake *MetricBatcher) BatchIncrementCounterArgsForCall(i int) string {
	fake.batchIncrementCounterMutex.RLock()
	defer fake.batchIncrementCounterMutex.RUnlock()
	return fake.batchIncrementCounterArgsForCall[i].name
}

func (fake *MetricBatcher) BatchAddCounter(name string, delta uint64) {
	fake.batchAddCounterMutex.Lock()
	fake.batchAddCounterArgsForCall = append(fake.batchAddCounterArgsForCall, struct {
		name  string
		delta uint64
	}{name, delta})
	fake.recordInvocation("BatchAddCounter", []interface{}{name, delta})
	fake.batchAddCounterMutex.Unlock()
	if fake.BatchAddCounterStub != nil {
		fake.BatchAddCounterStub(name, delta)
	}
}

func (fake *MetricBatcher) BatchAddCounterCallCount() int {
	fake.batchAddCounterMutex.RLock()
	defer fake.batchAddCounterMutex.RUnlock()
	return len(fake.batchAddCounterArgsForCall)
}

func (fake *MetricBatcher) BatchAddCounterArgsForCall(i int) (string, uint64) {
	fake.batchAddCounterMutex.RLock()
	defer fake.batchAddCounterMutex.RUnlock()
	return fake.batchAddCounterArgsForCall[i].name, fake.batchAddCounterArgsForCall[i].delta
}

func (fake *MetricBatcher) Close() {
	fake.closeMutex.Lock()
	fake.closeArgsForCall = append(fake.closeArgsForCall, struct{}{})
	fake.recordInvocation("Close", []interface{}{})
	fake.closeMutex.Unlock()
	if fake.CloseStub != nil {
		fake.CloseStub()
	}
}

func (fake *MetricBatcher) CloseCallCount() int {
	fake.closeMutex.RLock()
	defer fake.closeMutex.RUnlock()
	return len(fake.closeArgsForCall)
}

func (fake *MetricBatcher) Invocations() map[string][][]interface{} {
	fake.invocationsMutex.RLock()
	defer fake.invocationsMutex.RUnlock()
	fake.batchIncrementCounterMutex.RLock()
	defer fake.batchIncrementCounterMutex.RUnlock()
	fake.batchAddCounterMutex.RLock()
	defer fake.batchAddCounterMutex.RUnlock()
	fake.closeMutex.RLock()
	defer fake.closeMutex.RUnlock()
	return fake.invocations
}

func (fake *MetricBatcher) recordInvocation(key string, args []interface{}) {
	fake.invocationsMutex.Lock()
	defer fake.invocationsMutex.Unlock()
	if fake.invocations == nil {
		fake.invocations = map[string][][]interface{}{}
	}
	if fake.invocations[key] == nil {
		fake.invocations[key] = [][]interface{}{}
	}
	fake.invocations[key] = append(fake.invocations[key], args)
}

var _ metrics.MetricBatcher = new(MetricBatcher)
