// package gui -- графический интерфейс для сервера бото-фермы
package gui

import (
	"fmt"
	"log"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"

	"wartank/pkg/types"
	"wartank/server/gui/win_main"
)

// Gui -- интерфейс к графике бото-фермы
type Gui struct {
	serv    types.ИСервер
	app     fyne.App
	winMain *win_main.WinMain
}

// NewGui -- возвращает новый гуй для бото-фермы
func NewGui(serv types.ИСервер) (*Gui, error) {
	if serv == nil {
		return nil, fmt.Errorf("NewGui(): IServer==nil")
	}
	sf := &Gui{
		serv: serv,
		app:  app.New(),
	}
	return sf, nil
}

// Run -- запускает графику в работу
func (sf *Gui) Run() {
	log.Printf("Gui.Run()\n")
	var err error
	sf.winMain, err = win_main.NewWinMain(sf.serv)
	if err != nil {
		log.Printf("Gui.Run(): in create winMain, err=\n\t%v\n", err)
		sf.serv.CancelApp()
		return
	}
	sf.winMain.Show()
	sf.app.Run()
}

// ФайнПрилож -- возвращает Fyne-приложение
func (sf *Gui) ФайнПрилож() fyne.App {
	return sf.app
}
