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

import (
	"fmt"

	svg "github.com/ajstarks/svgo"

	"gitp78su.ipnodns.ru/svi/test_arch/lev0/alias"
	"gitp78su.ipnodns.ru/svi/test_arch/lev0/types"
	"gitp78su.ipnodns.ru/svi/test_arch/pkg/elems/use_group"
)

// ViewUseGroup -- отображение группы вариантов использования
type ViewUseGroup struct {
	*use_group.UseGroup
}

// NewViewUseGroup -- возвращает новое отображение группы вариант использования
func NewViewUseGroup(elem map[string]interface{}) (*ViewUseGroup, error) {
	useGroup, err := use_group.NewUseGroup(elem)
	if err != nil {
		return nil, fmt.Errorf("NewViewUseGroup(): in create UseGroup, err=\n\t%w", err)
	}
	sf := &ViewUseGroup{
		UseGroup: useGroup,
	}
	return sf, nil
}

// Draw -- рисует группу вариантов использования
func (sf *ViewUseGroup) Draw(canvas *svg.SVG, mapElem map[alias.Id]types.IElemDrawer) {
	x := int(sf.Coord_.X_)
	y := int(sf.Coord_.Y_)
	offX := int(sf.Offset_.X_)
	w := int(sf.W_)
	h := int(sf.H_)
	// Главный квадрат
	canvas.Rect(x, y, w, h, "fill:none;stroke:black")
	// Заголовок
	canvas.Rect(x, y-26, h/2, 26, "fill:none;stroke:black")
	if sf.Label_ != "" {
		canvas.Text(x+offX, y-8, string(sf.Label_), "font-size: 14px; font-family: Courier; fill: black")
	}
}
