// package fuel -- топливо в баке
package fuel

import (
	"fmt"
	"log"
	"strconv"
	"strings"
	"time"
	"wartank/pkg/types"
	"wartank/server/serv_bots/warbot/stat_tank/static_param"
)

// Топливо -- топливо в баке, +1 каждые 15 сек
type Топливо struct {
	ангар   types.ИАнгар
	топливо types.ИСтатПарам
}

// НовТопливо -- возвращает новый топливный бак
func НовТопливо(ангар types.ИАнгар) (*Топливо, error) {
	if ангар == nil {
		return nil, fmt.Errorf("NewFuel(): IAngar == nil")
	}
	сам := &Топливо{
		ангар:   ангар,
		топливо: static_param.НовСтатПарам("fuel"),
	}
	return сам, nil
}

// Run -- должен работать в отдельном потоке, контролит топливо
func (сам *Топливо) Run() {
	// Каждые 15 сек +1 топливо
	for {
		time.Sleep(time.Second * 15)
		топливо := сам.топливо.Получ()
		топливо++
		сам.топливо.Уст(топливо)
		// log.Printf("Fuel.Run: val=%v\n", fuel)
	}
}

// Обновить -- ищет в теле текста ангара топливо
func (сам *Топливо) Обновить() {
	// _mt.Println("\tAngarNet.findFuel()")
	lstAngar := сам.ангар.СписПолучить()
	var strOut string
	for _, strFuel := range lstAngar {
		if strings.Contains(strFuel, `<img title="Топливо" `) {
			strOut = strFuel
			break
		}
	}
	// Выделить топливо
	lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
	// Здесь бывает ошибка (когда возвращена пустая строка)
	if len(lstFuel) != 2 {
		log.Printf("ERRO Топливо.Обновить(): %q, при поиске строки топлива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
		return
	}
	if lstFuel[1] == "" {
		log.Printf("ERRO Топливо.Обновить(): %q, пустое значение в строке тплива, стр=\n\t%v\n", сам.ангар.Бот().Имя(), strOut)
		return
	}
	strFuel := lstFuel[1]
	iFuel, err := strconv.Atoi(strFuel)
	if err != nil {
		// log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
		return
	}
	сам.топливо.Уст(iFuel)
	if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
		return
	}
	// log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
}

// Fuel -- возвращает объект сстатическог опараметра топлива
func (сам *Топливо) Fuel() types.ИСтатПарам {
	return сам.топливо
}
