// package desc_lorca -- главный тип десктопного приложения для lorca
package desc_lorca

import (
	"wartank/desc_lorca/lorca_gui"
	"wartank/pkg/components/kernel/logger"
	"wartank/server"
)

// ДесктопЛорка -- главный тип десктопного приложения для lorca
type ДесктопЛорка struct {
	сервер   *server.Сервер      // Сервер для взаимодействия с лоркой
	гипЛорка *lorca_gui.ЛоркаГуи // ГИП десктопа на Лорке
	лог      *logger.Логгер
}

// НовДесктопЛорка -- возвращает новый десктоп на Лорке
func НовДесктопЛорка() *ДесктопЛорка {
	лог := logger.НовЛоггер("ДесктопЛорка")
	лог.Инфо("НовДесктопЛорка()\n")
	гип, ош := lorca_gui.НовЛоркаГуи()
	лог.Паника(ош != nil, "НовДесктопЛорка(): при создании ЛоркаГуи, ош=\n\t%v\n", ош)
	сам := &ДесктопЛорка{
		гипЛорка: гип,
		лог:      лог,
	}
	сам.сервер = server.НовСервер()
	return сам
}

// Отменить -- отменяет работу десктопа
func (сам *ДесктопЛорка) Отменить() {
	сам.сервер.Отменить()
}

// Пуск -- запускает работу десктопа
func (сам *ДесктопЛорка) Пуск() {
	go func() {
		ош := сам.сервер.Пуск()
		сам.лог.Паника(ош != nil, "Пуск(): при запуске сервера, ош=\n\t%v\n", ош)
	}()
	сам.сервер.Wg().Wait()
}
