// package death_worker -- исполнение схватки
package death_worker

import (
	"time"
	"wartank/pkg/arena"
	"wartank/pkg/components/arena_net"
	"wartank/pkg/types"
	"wartank/server/serv_bots/warbot/angar/death_match/death_worker/death_on"
	"wartank/server/serv_bots/warbot/angar/death_match/death_worker/death_on/battle_sound"
	"wartank/server/serv_bots/warbot/stat_tank/static_param"
)

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

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

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

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

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

// пуск исполнителя схватки
func (сам *СхваткаИсполнитель) пуск() {
	сам.еслиНачало = static_param.НовСтатПарам("alarm")
}

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

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