// package serv_gui -- десктопная графика для сервера
package serv_gui

import (
	"fmt"

	"github.com/AllenDang/giu"

	"wartank/pkg/types"
)

// ServGui -- десктопная графика для сервера
type ServGui struct {
	serv types.IServer
	wnd  *giu.MasterWindow
}

// NewServGui -- возвращает новую графику для сервера
func NewServGui(serv types.IServer) (*ServGui, error) {
	if serv == nil {
		return nil, fmt.Errorf("NewServGui(): IServer==nil")
	}
	sf := &ServGui{
		serv: serv,
		wnd:  giu.NewMasterWindow("Hello world", 400, 200, 0),
	}
	return sf, nil
}

// Run -- запускает работу графики сервера
func (sf *ServGui) Run() {
	sf.wnd.Run(sf.loop)
}

func (sf *ServGui) onClickMe() {
	fmt.Println("War-tank end work!")
	sf.serv.CancelApp()
	sf.wnd.Close()
}

func onImSoCute() {
	fmt.Println("click btn!!")
}

func (sf *ServGui) loop() {
	giu.SingleWindow().Layout(
		giu.Row(
			giu.Align(giu.AlignCenter).To(
				giu.Style().SetFontSize(20).To(
					giu.Label("[ WarTank ]"),
				),
			),
		),
		giu.Row(
			giu.Column(
				giu.Button("Выход").OnClick(sf.onClickMe),
				giu.Button("Click me").OnClick(onImSoCute),
			),
			giu.Column(
				giu.Button("Выход").OnClick(sf.onClickMe),
				giu.Spacing(),
				giu.Button("Click me").OnClick(onImSoCute),
			),
		),
		giu.Row(
			giu.Column(
				giu.Button("Выход").OnClick(sf.onClickMe),
				giu.Button("Click me").OnClick(onImSoCute),
			),
			giu.Column(
				giu.Button("Выход").OnClick(sf.onClickMe),
				giu.Spacing(),
				giu.Button("Click me").OnClick(onImSoCute),
			),
		),
	)
}
