package static_param

import (
	"sync"
	"wartank/pkg/components/kernel/logger"
	"wartank/pkg/types"
)

/*
	Исходник предоставляет единичный статичный параметр статистики
	танка. Проверяет присваиваемые значения.
	Потокобезопасно.
*/

// СтатПарам -- потокобезопасный параметр танка
type СтатПарам struct {
	имя  string // Имя параметра
	знач int    // Значение параметра
	блок sync.RWMutex
}

// НовСтатПарам -- возвращает новый *СтатПарам
func НовСтатПарам(имя string) *СтатПарам {
	лог := logger.НовЛоггер("СтатПарам")
	лог.Инфо("НовСтатПарам(%s)\n", имя)
	лог.Паника(имя == "", "НовСтатПарам(): имя параметра пустое\n")
	сам := &СтатПарам{
		имя: имя,
	}
	_ = types.ИСтатПарам(сам)
	return сам
}

// Уст -- устанавливает значение параметра
func (сам *СтатПарам) Уст(val int) {
	сам.блок.Lock()
	defer сам.блок.Unlock()
	сам.знач = val
}

// Получ -- значение хранимого параметра
func (сам *СтатПарам) Получ() int {
	сам.блок.RLock()
	defer сам.блок.RUnlock()
	return сам.знач
}

// Имя -- возвращает имя хранимого параметра
func (сам *СтатПарам) Имя() string {
	сам.блок.RLock()
	defer сам.блок.RUnlock()
	return сам.имя
}
