// package view_use_group -- отображение группы вариантов использования
package view_use_group

import (
	svg "github.com/ajstarks/svgo"
	"gitp78su.ipnodns.ru/svi/kern/v3"

	"gitp78su.ipnodns.ru/svi/goarch/lev0/types"
	"gitp78su.ipnodns.ru/svi/goarch/lev1/arch_use_group"
	"gitp78su.ipnodns.ru/svi/goarch/lev1/view_coord"
	"gitp78su.ipnodns.ru/svi/goarch/lev1/view_size"
)

// ViewUseGroup -- отображение группы вариантов использования
type ViewUseGroup struct {
	*arch_use_group.ArchUseCaseGroup
	text  types.IViewText
	coord *view_coord.ViewCoord
	size  *view_size.ViewSize
}

var (
	hassert = kern.GetFnHassert()
)

// NewViewUseGroup -- возвращает новое отображение группы вариант использования
func NewViewUseGroup(useGroup *arch_use_group.ArchUseCaseGroup, label types.IViewText) *ViewUseGroup {
	hassert(useGroup != nil, "NewViewUseGroup(): useGroup == nil")
	sf := &ViewUseGroup{
		ArchUseCaseGroup: useGroup,
		text:             label,
	}
	sf.SelfCheck()
	_ = types.IViewNode(sf)
	return sf
}

// Coord -- координаты группы вариантов использования
func (sf *ViewUseGroup) Coord() types.IViewCoord {
	return sf.coord
}

// SelfCheck -- проверяет корректность элемента
func (sf *ViewUseGroup) SelfCheck() {
	hassert(sf.ArchUseCaseGroup != nil, "ViewUseGroup.SelfCheck(): IElemUseGroup == nil")
	hassert(sf.text != nil, "ViewUseGroup.SelfCheck(): Label_ == nil")
}

// Draw -- рисует группу вариантов использования
func (sf *ViewUseGroup) Draw(canvas *svg.SVG) {
	x, y := sf.coord.Int()
	w, h := sf.size.Int()
	// Главный квадрат
	canvas.Rect(x, y, w, h, "fill:none;stroke:black")
	// Заголовок
	canvas.Rect(x, y-26, h/2, 26, "fill:none;stroke:black")
	sf.text.Draw(canvas)
}
