package damage

import (
	"sync"

	"wartank/pkg/alias"
)

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

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

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

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

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