package orusapi_test

import (
	"bytes"
	"testing"

	"github.com/rs/zerolog"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"

	"orus.io/orus-io/go-orusapi"
)

func TestLogging(t *testing.T) {
	var (
		buf bytes.Buffer
		log zerolog.Logger
	)

	var o orusapi.LoggingOptions
	require.NoError(t, o.Setup(&log, &buf))

	assert.Equal(t, zerolog.WarnLevel, o.Logger().GetLevel())

	o.Verbose()
	assert.Equal(t, zerolog.InfoLevel, o.Logger().GetLevel())

	o.Verbose()
	assert.Equal(t, zerolog.DebugLevel, o.Logger().GetLevel())

	o.Verbose()
	assert.Equal(t, zerolog.TraceLevel, o.Logger().GetLevel())

	require.NoError(t, o.Level(zerolog.LevelFatalValue))
	assert.Equal(t, zerolog.FatalLevel, o.Logger().GetLevel())

	require.NoError(t, o.Level(zerolog.LevelInfoValue))
	assert.Equal(t, zerolog.InfoLevel, o.Logger().GetLevel())

	require.NoError(t, o.Format("pretty"))
	log.Warn().Msg("this is a warning")
	assert.Contains(t, buf.String(), "WRN")

	buf.Reset()
	require.NoError(t, o.Format("json"))
	log.Warn().Msg("this is a warning")
	assert.Contains(t, buf.String(), "{")
}