package slog

import (
	"fmt"
	"os"
	"testing"
	"time"

	"wartank/pkg/mock/mockkernel"
)

/*
	Тестер для логера
*/

// Создание тестера
type tester struct {
	t    *testing.T
	err  error
	kern *mockkernel.MockKernel
	slog *Slog
}

func TestSlog(t *testing.T) {
	test := &tester{
		t:    t,
		kern: mockkernel.NewMockKernel(),
	}
	test.create()
	_ = os.RemoveAll("./log")
}

// Создание логера
func (sf *tester) create() {
	sf.t.Logf("=create=\n")
	sf.createBad1()
	sf.createBad2()
	sf.createGood1()
}

func (sf *tester) createGood1() {
	sf.t.Logf("=createGood1=\n")
	sf.slog, sf.err = NewSlog(sf.kern)
	if sf.err != nil {
		sf.t.Errorf("createGood1(): in create ISlog, err=\n\t%v", sf.err)
	}
	sf.kern.Slog_ = sf.slog
	sf.slog.Debugf("Проверка good1: %v\n", "test_123")
	sf.slog.Infof("Проверка good1: %v\n", "test_123")
	sf.slog.Warnf("Проверка good1: %v\n", "test_123")
	sf.slog.Errorf("Проверка good1: %v\n", fmt.Errorf("test_123").Error())
	sf.kern.CancelApp()
	time.Sleep(time.Millisecond * 150)
	sf.slog.Debugf("Проверка good1: %v\n", "test_123 bad")
	sf.slog.Infof("")
	sf.slog.Warnf("")
	sf.slog.Errorf("")
	sf.slog.close()
}

// Нет объекта ядра
func (sf *tester) createBad2() {
	sf.t.Logf("=createBad2=\n")
	slog, err := NewSlog(nil)
	if err == nil {
		sf.t.Errorf("createBad2(): in create ISlog, err==nil")
	}
	if slog != nil {
		sf.t.Errorf("createBad2): slog!=nil")
	}
}

// Нет строки сборки
func (sf *tester) createBad1() {
	sf.t.Logf("=createBad1=\n")
	slog, err := NewSlog(sf.kern)
	if err == nil {
		sf.t.Errorf("createBad1(): in create ISlog, err==nil")
	}
	if slog != nil {
		sf.t.Errorf("createBad1(): slog!=nil")
	}
	// os.RemoveAll(slog.)
}
