// package mock_service -- мок-сервис для тестирования
package mock_service

import (
	"context"
	"log"
	"sync"

	"git.p78su.freemyip.com/svi/gostore/pkg/types"
)

// MockService -- мок-сервис для тестирования
type MockService struct {
	fnCancel  func()
	ctx       context.Context
	ServHttp_ types.IServHttp
	Store_    types.IStore
	Wg_       *sync.WaitGroup
}

// NewMockService -- возвращает новый мок-сервис
func NewMockService() *MockService {
	ctxBg := context.Background()
	ctx, fnCancel := context.WithCancel(ctxBg)
	sf := &MockService{
		ctx:      ctx,
		fnCancel: fnCancel,
		Wg_:      &sync.WaitGroup{},
	}
	return sf
}

// Wg -- возвращает ожидатель группы потоков
func (sf *MockService) Wg() *sync.WaitGroup {
	return sf.Wg_
}

// Store -- возвращает хранилище
func (sf *MockService) Store() types.IStore {
	return sf.Store_
}

// ServHttp -- возвращает HTTP-сервис
func (sf *MockService) ServHttp() types.IServHttp {
	return sf.ServHttp_
}

// Run -- запускает сервис в работу
func (sf *MockService) Run() {
	log.Printf("MockService.Run()\n")
}

// Ctx -- возвращает контекст приложения
func (sf *MockService) Ctx() context.Context {
	return sf.ctx
}

// CancelApp -- отменяет контекст приложения
func (sf *MockService) CancelApp() {
	sf.fnCancel()
}
