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

import (
	"gitp78su.ipnodns.ru/svi/test_arch/lev0/alias"
	"gitp78su.ipnodns.ru/svi/test_arch/lev0/types"
	"gitp78su.ipnodns.ru/svi/test_arch/pkg/elems/coord"
	"gitp78su.ipnodns.ru/svi/test_arch/pkg/elems/offset"
)

// Label -- текстовая метка для отображения
type Label struct {
	Label_  alias.Label    `json:"label"`   // Метка для вывода
	Offset_ *offset.Offset `json:"offsetX"` // Смещение метки
	Coord_  *coord.Coord   `json:"coord"`   // Координаты метки
}

// NewLabel -- возвращает новую метку
func NewLabel(elem map[string]interface{}) *Label {
	var label string
	_label, isOk := elem["label"]
	if !isOk {
		label = "<empty>"
	} else {
		label = _label.(string)
	}
	return &Label{
		Label_:  alias.Label(label),
		Offset_: offset.NewOffset(elem),
		Coord_:  coord.NewCoord("coord", elem),
	}
}

// Get -- возвращает метку
func (sf *Label) Get() alias.Label {
	return sf.Label_
}

// Coord -- возвращает координаты метки
func (sf *Label) Coord() types.ICoord {
	return sf.Coord_
}

// Offset -- возвращает смещение метки
func (sf *Label) Offset() types.IOffset {
	return sf.Offset_
}
