package imageutils

import (
	"image"
	"image/color"
	"image/draw"
	"image/png"
	"io"
	"testing"

	"git.nkpl.cc/twocookedfaggots/imageutils/pkg/texture"
)

func Render(img image.Image, rect image.Rectangle) image.Image {
	newimg := image.NewRGBA(rect)
	draw.Draw(newimg, rect, image.White, image.ZP, draw.Src)
	draw.Draw(newimg, rect, img, image.ZP, draw.Over)
	return newimg
}

func BenchmarkScale(b *testing.B) {
	for i := 0; i < b.N; i++ {
		err := png.Encode(io.Discard,
			Scale(64, Render(
				texture.New(color.White,
					color.Black, 2),
				image.Rect(0, 0, 64, 64),
			)),
		)
		if err != nil {
			panic(err)
		}
	}
}

type SinglePixel struct{}

func (s SinglePixel) At(x, y int) color.Color {
	return color.White
}

func (s SinglePixel) ColorModel() color.Model {
	return color.RGBAModel
}

func (s SinglePixel) Bounds() image.Rectangle {
	return image.Rect(0, 0, 1, 1)
}

func BenchmarkSinglePixel(b *testing.B) {
	instance := SinglePixel{}
	err := png.Encode(io.Discard,
		Scale(b.N, instance),
	)
	if err != nil {
		panic(err)
	}

}
