package metrics

import (
	"testing"
	"time"

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

func TestNoopMetrics_ImplementsInterface(_ *testing.T) {
	var _ Metrics = (*NoopMetrics)(nil)
}

func TestNoopMetrics_NoPanics(t *testing.T) {
	m := NewNoopMetrics()

	assert.NotPanics(t, func() {
		m.Increment("key", map[string]string{"a": "b"})
		m.Counter("key", map[string]string{"a": "b"}, 1)
		m.Distribution("key", map[string]string{"a": "b"}, 1.5)
		m.DistributionMs("key", map[string]string{"a": "b"}, time.Second)
	})
}

func TestNoopMetrics_NilTags(t *testing.T) {
	m := NewNoopMetrics()

	assert.NotPanics(t, func() {
		m.Increment("key", nil)
		m.Counter("key", nil, 1)
		m.Distribution("key", nil, 1.5)
		m.DistributionMs("key", nil, time.Second)
	})
}

func TestNoopMetrics_WithTags(t *testing.T) {
	m := NewNoopMetrics()
	tagged := m.WithTags(map[string]string{"env": "prod"})

	assert.NotNil(t, tagged)
	assert.Equal(t, m, tagged)
}
