package damage

import (
	"sync"

	"wartank/pkg/alias"
)

/*
	Следит за уроном танка.
	Сравнивает с предыдущим значением,
	результат сравнения при каждом присвоении -- сохраняет
*/

// Damage -- урон танка с памятью
type Damage struct {
	val   alias.ADamage
	res   string
	block sync.RWMutex
}

// NewDamage -- возвращает новый *Damage
func NewDamage() *Damage {
	return &Damage{
		res: "none",
	}
}

// Set -- устанавливает урон
func (sf *Damage) Set(val alias.ADamage) {
	sf.block.Lock()
	defer sf.block.Unlock()
	if sf.val == 0 { // Первоначальное присвоение
		sf.val = val
		return
	}
	switch {
	case sf.val > val: // Урон уменьшился
		sf.res = "down"
	case sf.val < val: // Урон увеличился
		sf.res = "up"
	default: // Урон не изменился
		sf.res = "none"
	}
	sf.val = val
}

// Result -- возвращает результат сравнения урона старого и текущего
func (sf *Damage) Result() string {
	sf.block.RLock()
	defer sf.block.RUnlock()
	return sf.res
}
