// package arch_text -- архитектурный текст
package arch_text

import (
	"fmt"

	"gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"

	"gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
	"gitp78su.ipnodns.ru/svi/goarch/lev0/types"
	"gitp78su.ipnodns.ru/svi/goarch/lev1/arch_node"
)

// ArchText -- архитектурный текст
type ArchText struct {
	*arch_node.ArchNode
	Text_ alias.ArchText `yaml:"text"` // Значение текста
}

// NewArchText -- возвращает новый архитектурный текст
func NewArchText(text alias.ArchText, parentId alias.ArchId) ktypes.Result[*ArchText] {
	sf := &ArchText{
		ArchNode: arch_node.NewArchNode("arch_text", parentId),
		Text_:    text,
	}
	someErr := sf.InvarCheck()
	if someErr.IsVal() {
		return ktypes.NewErr[*ArchText](someErr.Val())
	}
	_ = types.IArchText(sf)
	return ktypes.NewOk(sf)
}

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

// String -- возвращает метку
//
//go:fix inline
func (sf *ArchText) String() string {
	return string(sf.Text_)
}

// Get -- возвращает метку
//
//go:fix inline
func (sf *ArchText) Get() alias.ArchText {
	return sf.Text_
}
