// package view_actor -- SVG-фигура актора
package view_actor

import (
	"fmt"
	"log"

	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/actor"
)

// ViewActor -- SVG-фигура актора
type ViewActor struct {
	*actor.Actor
}

// NewViewActor -- возвращает новый SVG-актор
func NewViewActor(elem map[string]interface{}) (*ViewActor, error) {
	actor, err := actor.NewActor(elem)
	if err != nil {
		return nil, fmt.Errorf("NewViewActor(): in create Actor, err=\n\t%w", err)
	}
	sf := &ViewActor{
		Actor: actor,
	}
	return sf, nil
}

// Draw -- рисует фигуру актора
func (sf *ViewActor) 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_)
	offY := int(sf.Offset_.Y_)
	// Голова
	canvas.Circle(x, y, 10, "fill:none;stroke:red")
	// Туловище
	canvas.Line(x, y+10, x, y+40, "stroke:red;stroke-width:1")
	// Руки
	canvas.Line(x-15, y+20, x+15, y+20, "stroke:red;stroke-width:1")
	// Нога левая
	canvas.Line(x, y+40, x-10, y+55, "stroke:red;stroke-width:1")
	// Нога правая
	canvas.Line(x, y+40, x+10, y+55, "stroke:red;stroke-width:1")
	// Надпись
	log.Printf("ViewActor.Draw(): x=%d, y=%d, offX=%d, offY=%d", x, y, offX, offY)
	canvas.Text(x+offX, y+offY, string(sf.Get()), "font-size: 14px; font-family: sans-serif; fill: black")
	if msgErr := sf.Check(mapElem); msgErr != "" { // Проверки на ошибки
		canvas.Group("Ошибка")
		canvas.Title(msgErr)
		canvas.Image(x+offX-20, y+offY-20, 16, 16, "/static/img/warning.png")
		canvas.Gend()
	}
}
