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

import (
	"log"

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

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

// ViewActor -- SVG-фигура актора
type ViewActor struct {
	types.IArchActor
	Coord_ *view_coord.ViewCoord
	text   *view_text.ViewText
}

var (
	hassert = kern.GetFnHassert()
)

// NewViewActor -- возвращает новый SVG-актор
func NewViewActor(actor types.IArchActor) *ViewActor {
	hassert(actor != nil, "in NewViewActor(), actor is nil")
	sf := &ViewActor{
		IArchActor: actor,
	}
	return sf
}

// Draw -- рисует фигуру актора
func (sf *ViewActor) Draw(canvas *svg.SVG) {
	x, y := sf.Coord_.Int()
	offX, offY := sf.text.Offset().Int()
	// Голова
	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, sf.text.String(), "font-size: 14px; font-family: sans-serif; fill: black")
	if optErr := sf.InvarCheck(); optErr.IsVal() { // Проверки на ошибки
		canvas.Group("Ошибка")
		canvas.Title(optErr.Val().Error())
		canvas.Image(x+offX-20, y+offY-20, 16, 16, "/static/img/warning.png")
	}
	canvas.Gend()
}
