package testutils

import (
	"bytes"
	"io"
	"strings"
	"testing"

	"github.com/stretchr/testify/assert"

	"tiup-log-collector/log"
)

var buf *bytes.Buffer

func InitTestLogger() {
	SetTestingLoggerBuffer(new(bytes.Buffer))
	err := log.InitLogger(&log.LoggersConfig{
		EventLogWriter: buf,
		AppLogWriter:   nil,
	})
	if err != nil {
		panic(err)
	}
}

func ResetTestLogger() {
	log.ResetLogger()
	SetTestingLoggerBuffer(new(bytes.Buffer))
}

func SetTestingLoggerBuffer(buffer *bytes.Buffer) {
	buf = buffer
}

func AssertNoLog(t *testing.T) {
	line, err := buf.ReadString('\n')
	if err != nil {
		assert.Equal(t, io.EOF, err)
	} else {
		t.Errorf("should not output log: %q", line)
	}
}

func AssertLogNextLineMatch(t *testing.T, regexp interface{}) {
	actualLine, err := buf.ReadString('\n')
	if err != nil {
		if err == io.EOF {
			t.Errorf("no log")
		} else {
			t.Fatal(err)
		}
	}
	actualLine = strings.TrimRight(actualLine, "\n")
	assert.Regexp(t, regexp, actualLine, "log line mismatched")
}
