package artist

import "math"
import "image/color"

// EllipticallyBordered is a pattern with a border and a fill that is elliptical
// in shape.
type EllipticallyBordered struct {
	Fill Pattern
	Stroke
}

// AtWhen satisfies the Pattern interface.
func (pattern EllipticallyBordered) AtWhen (x, y, width, height int) (c color.RGBA) {
	xf := (float64(x) + 0.5) / float64(width ) * 2 - 1
	yf := (float64(y) + 0.5) / float64(height) * 2 - 1
	distance := math.Sqrt(xf * xf + yf * yf)

	var radius float64
	if width < height {
		// vertical
		radius = 1 - float64(pattern.Weight * 2) / float64(width)
	} else {
		// horizontal
		radius = 1 - float64(pattern.Weight * 2) / float64(height)
	}

	if distance < radius {
		return pattern.Fill.AtWhen(x, y, width, height)
	} else {
		return pattern.Stroke.AtWhen(x, y, width, height)
	}
}