// package service -- главный тип сервиса
package service

import (
	"gitp78su.ipnodns.ru/svi/goarch/lev2/engine_http"
	"gitp78su.ipnodns.ru/svi/kern/v3"
	"gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
	. "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
)

// Service -- тип сервиса
type Service struct {
	kCtx       IKernelCtx
	engineHttp *engine_http.EngineHttp
}

// NewService -- возвращает новый сервис
func NewService() *Service {
	kCtx := kern.GetKernelCtx()
	kCtx.Set("monolitName", "SviArch", "NewService()")
	sf := &Service{
		kCtx:       kern.GetKernelCtx(),
		engineHttp: engine_http.NewEngineHttp(),
	}
	return sf
}

// Run -- запуск сервиса
func (sf *Service) Run() ktypes.Result[bool] {
	sHttp := sf.kCtx.Get("kServHttp").Val().(ktypes.IKernelServerHttp)
	go sHttp.Run()
	sf.kCtx.Wg().Wait()
	return ktypes.NewOk(true)
}
