// package logger -- логгер
package logger

import (
	"fmt"
	"sync"
	"wartank/pkg/types"
)

var блок sync.Mutex

type Логгер struct {
	префикс string
}

func НовЛоггер(префикс string) *Логгер {
	сам := &Логгер{
		префикс: префикс,
	}
	_ = types.ИЛоггер(сам)
	return сам
}

// Паника -- проверяет на совпадение условия
func (сам *Логгер) Паника(условие bool, формат string, аргументы ...interface{}) {
	блок.Lock()
	defer блок.Unlock()
	if условие {
		panic(fmt.Sprintf("ПАНИК "+сам.префикс+"."+формат, аргументы...))
	}
}

// Ошибка -- выводит в консоль ошибку
func (сам *Логгер) Ошибка(формат string, аргументы ...interface{}) {
	блок.Lock()
	defer блок.Unlock()
	fmt.Printf("ОШИБК "+сам.префикс+"."+формат, аргументы...)
}

// Отладка -- выводит в консоль отладку
func (сам *Логгер) Отладка(формат string, аргументы ...interface{}) {
	блок.Lock()
	defer блок.Unlock()
	fmt.Printf("ОТЛАД "+сам.префикс+"."+формат, аргументы...)
}

// Инфо -- выводит в консоль информацию
func (сам *Логгер) Инфо(формат string, аргументы ...interface{}) {
	блок.Lock()
	defer блок.Unlock()
	fmt.Printf("ИНФО  "+сам.префикс+"."+формат, аргументы...)
}

// Внимание -- выводит в консоль предупреждение
func (сам *Логгер) Внимание(формат string, аргументы ...interface{}) {
	блок.Lock()
	defer блок.Unlock()
	fmt.Printf("ВНИМА "+сам.префикс+"."+формат, аргументы...)
}
