package drawtool

import (
	"git.kirsle.net/SketchyMaze/doodle/pkg/native"
	"git.kirsle.net/go/render"
	"git.kirsle.net/go/ui"
)

// TextSettings holds currently selected Text Tool settings.
type TextSettings struct {
	Font    string // like 'DejaVuSans.ttf'
	Size    int
	Message string
	Label   *ui.Label // cached label texture
}

// Currently active settings (global variable)
var TT TextSettings

// IsZero checks if the TextSettings are populated.
func (tt TextSettings) IsZero() bool {
	return tt.Font == "" && tt.Size == 0 && tt.Message == ""
}

// ToStroke converts a TextSettings configuration into a Freehand
// Stroke, coloring in all of the pixels.
func (tt TextSettings) ToStroke(e render.Engine, color render.Color, at render.Point) (*Stroke, error) {
	stroke := NewStroke(Freehand, color)

	// Render the text to a Go image so we can get the colors from
	// it uniformly.
	img, err := native.TextToImage(e, tt.Label.Font)
	if err != nil {
		return nil, err
	}

	// Pull all its pixels.
	var (
		max = img.Bounds().Max
		x   = 0
		y   = 0
	)
	for x = 0; x < max.X; x++ {
		for y = 0; y < max.Y; y++ {
			hue := img.At(x, y)
			r, g, b, _ := hue.RGBA()
			if r == 65535 && g == r && b == r {
				continue
			}

			stroke.Points = append(stroke.Points, render.NewPoint(x+at.X, y+at.Y))
		}
	}

	return stroke, nil
}
