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

import (
	"fmt"
	// "log"
	"strings"
	"time"

	"wartank/pkg/components/section"
	"wartank/pkg/components/sectionnet"
	"wartank/pkg/types"
)

// СражениеОжидание -- ожидатель начала битвы
type СражениеОжидание struct {
	*section.Section
	bot types.ИБот
	net *sectionnet.SectionNet
}

// НовСражениеОжидание -- возвращает новый ожидатель битвы
func НовСражениеОжидание(bot types.ИБот) (*СражениеОжидание, error) {
	section, err := section.NewSection(bot, "Ожидание сражения", `<title>Сражения</title>`)
	if err != nil {
		return nil, fmt.Errorf("NewBattleWait(): in create ISection, err=\n\t%w", err)
	}

	сам := &СражениеОжидание{
		Section: section,
		bot:     bot,
	}
	сам.net, err = sectionnet.NewSectionNet(сам, "https://wartank.ru/pve")
	if err != nil {
		return nil, fmt.Errorf("NewBattleWait(): in create *SectionNet, err=\n\t%w", err)
	}
	return сам, nil
}

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