// package battle_worker -- исполнение битвы
package battle_worker

import (
	"time"
	"wartank/pkg/arena"
	"wartank/pkg/components/arena_net"
	"wartank/pkg/types"
	"wartank/server/serv_bots/warbot/angar/battle/battle_worker/battle_worker"
	"wartank/server/serv_bots/warbot/angar/battle/battle_worker/battle_worker/battle_sound"
	"wartank/server/serv_bots/warbot/stat_tank/static_param"
)

// СражениеДействие -- исполнение битвы
type СхваткаИсполнитель struct {
	types.ИАрена
	бот  types.ИБот
	сеть types.ИАренаСеть

	еслиНачало types.ИСтатПарам

	// Непосредственное сражение
	действие *battle_worker.СражениеДействие

	sound *battle_sound.BattleSound // Однопоточное проигрывание звука
}

// НовСражениеДействие -- возвращает новый исполнитель битвы
func НовСражениеИсполнитель(bot types.ИБот) *СхваткаИсполнитель {
	сам := &СхваткаИсполнитель{
		бот:        bot,
		еслиНачало: static_param.НовСтатПарам("alarm"),
		sound:      battle_sound.NewBattleSound(),
	}
	аренаКонфиг := arena.АренаКонфиг{
		Бот_:         bot,
		АренаИмя_:    "Ход сражения",
		СтрКонтроль_: `<title>Сражения</title>`,
		ФнПуск_:      сам.пуск,
		СтрУрл_:      "https://wartank.ru/pve",
	}
	сам.ИАрена = arena.НовАрена(аренаКонфиг)
	сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/pve")
	return сам
}

// выполняет битву
func (сам *СхваткаИсполнитель) пуск() {
	сам.действие = battle_worker.НовСражениеДействие(сам.бот) // IBattleOn (онлайн)
	сам.sound.Play()
	time.Sleep(time.Second * 10) // Задержка для звука на странице
	<-сам.действие.Контекст().Done()
	// log._rintf("Battle.runBaton(): сражение завершено\n")
}

// Тревога -- возвращает признак начала сражения (для браузера)
func (сам *СхваткаИсполнитель) Тревога() types.ИСтатПарам {
	return сам.еслиНачало
}
