// package view_use_case -- отображение вариант использования
package view_use_case

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_case"
)

// ViewUseCase -- вариант использования
type ViewUseCase struct {
	*use_case.UseCase
}

// NewViewUseCase -- возвращает новый вариант использования
func NewViewUseCase(elem map[string]interface{}) (*ViewUseCase, error) {
	useCase, err := use_case.NewUseCase(elem)
	if err != nil {
		return nil, fmt.Errorf("NewViewUseCase(): in create BaseSvg, err=\n\t%w", err)
	}
	sf := &ViewUseCase{
		UseCase: useCase,
	}
	return sf, nil
}

// Draw -- рисует вариант использования
func (sf *ViewUseCase) 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.Ellipse(x+70, y, w, h, "fill:none;stroke:black")
	if sf.Label_ != "" {
		canvas.Text(x+offX, y+6, string(sf.Label_), "font-size: 14px; font-family: Courier; fill: black")
	}
	if msgErr := sf.Check(mapElem); msgErr != "" {
		canvas.Group("Ошибка")
		canvas.Title(msgErr)
		canvas.Image(x-20, y-20, 16, 16, "/static/img/warning.png")
		canvas.Gend()
	}
}
