// package arch_use_group -- группа вариантов использования
package arch_use_group

import (
	"fmt"

	"gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
	"gitp78su.ipnodns.ru/svi/goarch/lev0/types"
	"gitp78su.ipnodns.ru/svi/goarch/lev1/arch_node"
	"gitp78su.ipnodns.ru/svi/kern/v3"
	"gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
)

// ArchUseCaseGroup -- группа вариантов использования
type ArchUseCaseGroup struct {
	*arch_node.ArchNode
}

var (
	hassert = kern.GetFnHassert()
)

// NewArchUseCaseGroup -- возвращает новую группу вариантов использования
func NewArchUseCaseGroup(parentId alias.ArchId) *ArchUseCaseGroup {
	sf := &ArchUseCaseGroup{
		ArchNode: arch_node.NewArchNode("use_case_group", parentId),
	}
	sf.SelfCheck()
	_ = types.IArchUseGroup(sf)
	return sf
}

// Len -- заглушка на длину
func (sf *ArchUseCaseGroup) Len() int {
	return 0
}

// InvarCheck -- проверка инвариантов
func (sf *ArchUseCaseGroup) InvarCheck() ktypes.Option[error] {
	if sf.ArchNode == nil {
		err := fmt.Errorf("ArchUseCaseGroup.InvarCheck(): ArchNode==nil")
		return ktypes.NewSome(err)
	}
	return ktypes.NewNone[error]()
}

// Size -- возвращает размер
//
//go:fix inline
// func (sf *ArchUseCaseGroup) Size() types.IViewSize {
// 	return sf.Size_
// }

// Links -- заглушка на связи между объектами
//
//go:fix inline
func (sf *ArchUseCaseGroup) Links() []alias.ArchId {
	return []alias.ArchId{sf.Id()}
}

// Check -- заглушка под проверку
func (sf *ArchUseCaseGroup) SelfCheck() {
	hassert(sf.ArchNode != nil, "NewUseGroup(): IElemBase is nil")
}
