package static_param

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

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

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

// НовСтатПарам -- возвращает новый *СтатПарам
func НовСтатПарам(имя string) (*СтатПарам, error) {
	if имя == "" {
		return nil, fmt.Errorf("НовСтатПарам(): name is empty")
	}
	сам := &СтатПарам{
		имя: имя,
	}
	_ = types.ИСтатПарам(сам)
	return сам, nil
}

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

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

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