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

import (
	"fmt"
	"time"

	"wartank/pkg/components/section"
	"wartank/pkg/components/sectionnet"
	"wartank/pkg/types"
	"wartank/server/serv_bots/warbot/angar/battle/battle_worker/battleon"
	"wartank/server/serv_bots/warbot/angar/battle/battle_worker/battleon/battlesound"
	"wartank/server/serv_bots/warbot/tank/tankstat/static_param"
)

// СражениеДействие -- исполнение битвы
type СражениеИсполнитель struct {
	*section.Section
	бот  types.ИБот
	сеть *sectionnet.SectionNet

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

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

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

// НовСражениеДействие -- возвращает новый исполнитель битвы
func НовСражениеИсполнитель(bot types.ИБот) (*СражениеИсполнитель, error) {
	section, err := section.NewSection(bot, "Ход сражения", `<title>Сражения</title>`)
	if err != nil {
		return nil, fmt.Errorf("NewBattleWorker(): in create *Section, err=\n\t%w", err)
	}
	еслиНачало, ош := static_param.НовСтатПарам("alarm")
	if ош != nil {
		return nil, fmt.Errorf("NewBattleWorker(): при создании стат еслиНачало, err=\n\t%w", ош)
	}
	sf := &СражениеИсполнитель{
		Section:    section,
		бот:        bot,
		еслиНачало: еслиНачало,
		sound:      battlesound.NewBattleSound(),
	}
	sf.сеть, err = sectionnet.NewSectionNet(sf, "https://wartank.ru/pve")
	if err != nil {
		return nil, fmt.Errorf("NewBattleWorker(): in create *SectionNet, err=\n\t%w", err)
	}
	return sf, nil
}

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

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