// package battle_wait -- заставляет ожидать начало битвы
package battle_wait

import (
	"strings"
	"time"
	"wartank/pkg/alias"
	"wartank/pkg/arena"
	"wartank/pkg/components/arena_net"
	"wartank/pkg/types"
)

// СражениеОжидание -- ожидатель начала битвы
type СхваткаОжидание struct {
	types.ИАрена
	бот  types.ИБот
	сеть types.ИАренаСеть
}

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

func (сам *СхваткаОжидание) пуск() {

}

// Ожидать -- ожидает начало сражения
func (сам *СхваткаОжидание) Ожидать() {

	// Зайти в цикл ожидания сражения
	for {
		// countTime := сам.ВремяОпрос().Получ()
		// if countTime > 0 {
		// 	time.Sleep(time.Millisecond * 500)
		// 	// log.Printf("BattleWait.Wait(): countTime=%v\n", сам.CountDown().String())
		// 	continue
		// }
		стрВрем := сам.ждать()
		if стрВрем == "" {
			return
		}
		лстВрем := strings.Split(стрВрем, ":")
		стрЧас := лстВрем[0]
		if стрЧас > "00" {
			time.Sleep(time.Hour * 1)
			continue
		}
		стрМин := лстВрем[1]
		if стрМин > "10" {
			time.Sleep(time.Minute * 10)
			continue
		}
		if стрМин > "01" {
			time.Sleep(time.Minute * 1)
			continue
		}
		if "00:00:05" < стрВрем && стрВрем < "00:00:59" {
			time.Sleep(time.Second * 5)
			continue
		}
		time.Sleep(time.Second * 1)
	}
}

// Ждёт пока время не обнулится
func (сам *СхваткаОжидание) ждать() string {
	сам.сеть.Обновить()
	var (
		strOut      string
		lstBattle   = сам.СписПолучить()
		еслиНайдено bool
	)
	for _, strOut = range lstBattle {
		if strings.Contains(strOut, `<span>до начала `) {
			еслиНайдено = true
			break
		}
		// if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) { // Это уже битва
		// 	if len(сам.chBattle) == 0 {
		// 		сам.chBattle <- 1
		// 	}
		// 	return
		// }
	}
	if !еслиНайдено { // Сражение уже идёт
		return ""
	}
	// Найдена строка ожидания начала сражения
	lstTime := strings.Split(strOut, `<span>до начала `)
	strTime := lstTime[1]
	lstTime = strings.Split(strTime, ` (`)
	strTime = lstTime[0]
	if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil { // Возможно уже всё
		// log._rintf("WARN BattleWait.Wait(): при установке времени ожидания сражения(%v)\n\terr=%v\n", strTime, err)
		return ""
	}
	return strTime
}
