// package arena_state -- состояние арены
package arena_state

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

// СценаСостояние -- состояние сцены
type АренаСостояние struct {
	состояниеИмя alias.АренаСостояние // Имя режима
	работаИмя    alias.АренаРаботаИмя // Имя работы
	режимНомер   alias.АренаРежимНомер
	block        sync.RWMutex
}

// НовСекцияРежим -- возвращает новый *СценаРежим
func НовАренаСостояние() *АренаСостояние {
	сам := &АренаСостояние{
		состояниеИмя: "старт",
	}
	_ = types.ИАренаСостояние(сам)
	return сам
}

// РежимНомер -- возвращает номер режима арены
func (сам *АренаСостояние) РежимНомер() alias.АренаРежимНомер {
	сам.block.RLock()
	defer сам.block.RUnlock()
	return сам.режимНомер
}

// РаботаИмяУст -- устанавливает имя текущей работы арены
func (сам *АренаСостояние) РаботаИмяУст(имя alias.АренаРаботаИмя) {
	сам.block.Lock()
	defer сам.block.Unlock()
	сам.работаИмя = имя
}

// РаботаИмя -- возвращает имя текущей работы арены
func (сам *АренаСостояние) РаботаИмя() alias.АренаРаботаИмя {
	сам.block.RLock()
	defer сам.block.RUnlock()
	return сам.работаИмя
}

// СостояниеУст -- устанавливает состояние арены
func (сам *АренаСостояние) СостояниеУст(состояние alias.АренаСостояние) {
	сам.block.Lock()
	defer сам.block.Unlock()
	сам.состояниеИмя = состояние
}

// Состояние -- возвращает состояние арены
func (сам *АренаСостояние) Состояние() alias.АренаСостояние {
	сам.block.RLock()
	defer сам.block.RUnlock()
	return сам.состояниеИмя
}

// Работа -- возвращает хранимое имя работы арены
func (сам *АренаСостояние) Работа() alias.АренаРаботаИмя {
	сам.block.RLock()
	defer сам.block.RUnlock()
	return сам.работаИмя
}

// РаботаУст -- устанавливает хранимое имя работы арены
func (сам *АренаСостояние) РаботаУст(работаИмя alias.АренаРаботаИмя) {
	сам.block.Lock()
	defer сам.block.Unlock()
	сам.работаИмя = работаИмя
}
