package slog

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

	"wartank/pkg/mock/mockkernel"
	"wartank/pkg/types"
)

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

// Создание тестера
type tester struct {
	t    *testing.T
	err  error
	ядро types.ИЯдро
	slog *Слог
}

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

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

func (сам *tester) createGood1() {
	сам.t.Logf("=createGood1=\n")
	сам.slog, сам.err = НовСлог(сам.ядро)
	if сам.err != nil {
		сам.t.Errorf("createGood1(): in create ISlog, err=\n\t%v", сам.err)
	}
	ядро := сам.ядро.(*mockkernel.MockKernel)
	ядро.Slog_ = сам.slog
	сам.slog.Отладка("Проверка good1: %v\n", "test_123")
	сам.slog.Инфо("Проверка good1: %v\n", "test_123")
	сам.slog.Внимание("Проверка good1: %v\n", "test_123")
	сам.slog.Ошибка("Проверка good1: %v\n", fmt.Errorf("test_123").Error())
	сам.ядро.Отменить()
	time.Sleep(time.Millisecond * 150)
	сам.slog.Отладка("Проверка good1: %v\n", "test_123 bad")
	сам.slog.Инфо("")
	сам.slog.Внимание("")
	сам.slog.Ошибка("")
	сам.slog.close()
}

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