package doodads

import (
	"git.kirsle.net/go/render"
	"github.com/google/uuid"
)

// Drawing is a Doodad Actor that is based on drawings made inside the game.
type Drawing struct {
	Doodad *Doodad

	id       string
	point    render.Point
	velocity render.Point
	accel    int
	size     render.Rect
	hitbox   render.Rect
	grounded bool
}

// NewDrawing creates a Drawing actor based on a Doodad drawing. If you pass
// an empty ID string, it will make a random UUIDv4 ID.
func NewDrawing(id string, doodad *Doodad) *Drawing {
	if id == "" {
		id = uuid.Must(uuid.NewUUID()).String()
	}
	return &Drawing{
		id:     id,
		Doodad: doodad,
		size:   doodad.Rect(),
	}
}

// ID to get the Drawing ID.
func (d *Drawing) ID() string {
	return d.id
}

// Position returns the Drawing's position.
func (d *Drawing) Position() render.Point {
	return d.point
}

// Velocity returns the Drawing's velocity.
func (d *Drawing) Velocity() render.Point {
	return d.velocity
}

// SetVelocity to set the speed.
func (d *Drawing) SetVelocity(v render.Point) {
	d.velocity = v
}

// Acceleration returns the Drawing's acceleration.
func (d *Drawing) Acceleration() int {
	return d.accel
}

// SetAcceleration to set the acceleration.
func (d *Drawing) SetAcceleration(v int) {
	d.accel = v
}

// Size returns the Drawing's size.
func (d *Drawing) Size() render.Rect {
	return d.size
}

// Grounded returns whether the Drawing is standing on solid ground.
func (d *Drawing) Grounded() bool {
	return d.grounded
}

// SetGrounded sets the grounded state.
func (d *Drawing) SetGrounded(v bool) {
	d.grounded = v
}

// MoveBy a relative value.
func (d *Drawing) MoveBy(by render.Point) {
	d.point.Add(by)
}

// MoveTo an absolute world value.
func (d *Drawing) MoveTo(to render.Point) {
	d.point = to
}

// Draw the drawing.
func (d *Drawing) Draw(e render.Engine) {

}
