// Copyright (c) 2021 OceanBase
// obagent is licensed under Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
//
// http://license.coscl.org.cn/MulanPSL2
//
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
// See the Mulan PSL v2 for more details.

package log

import (
	"bytes"
	"context"
	"fmt"
	"os"
	"testing"

	"github.com/sirupsen/logrus"
)

func TestLogExample(t *testing.T) {
	buf := bytes.NewBuffer(make([]byte, 0, 1024))
	_ = buf
	logger := InitLogger(LoggerConfig{
		Output: os.Stdout,
		Level:  "debug",
	})

	// use logger
	logger.Debugf("debug-log-%d", 1)
	logger.WithField("field-key-1", "field-val-1").Infof("info-log-%d", 1)

	// with context, set traceId
	ctx := context.WithValue(context.Background(), TraceIdKey{}, "TRACE-ID")
	ctxlog := logger.WithContext(ctx)
	ctxlog.Debugf("debug-log-%d", 2)
	fieldlog := ctxlog.WithFields(map[string]interface{}{
		"field-key-2": "field-val-2",
		"field-key-3": "field-val-3",
	})
	// use the same field logger to avoid allocte new Entry
	fieldlog.Infof("info-log-%d", 2)
	fieldlog.Infof("info-log-%s", "2.1")

	// use logrus
	logrus.Debugf("debug-log-%d", 3)
	logrus.WithField("field-key-3", "field-val-3").Infof("info-log-%d", 3)
	fmt.Printf("%s", buf.Bytes())
}

func TestLogFile(t *testing.T) {
	InitLogger(LoggerConfig{
		Output:     nil,
		Level:      "debug",
		Filename:   "../tests/test.log",
		MaxSize:    10, // 10M
		MaxAge:     3,  // 3days
		MaxBackups: 3,
		LocalTime:  false,
		Compress:   false,
	})

	// use logrus
	logrus.Debugf("debug-log-%d", 1)
	logrus.WithField("field-key-1", "field-val-1").Infof("info-log-%d", 1)
}
