package main

import (
	sg "github.com/d2fn/sumi/internal/graphics"
	rl "github.com/gen2brain/raylib-go/raylib"
)

type BlindsLayer struct {
	Field Field
	Dirty bool
}

func NewBlindsLayer(field Field) *BlindsLayer {
	return &BlindsLayer {
		Field: field,
		Dirty: true,
	}
}

func (l *BlindsLayer) Draw(env *Env, g *sg.Graphics) {

	g.BeginAdditiveBlend()

	rows := 200
	rowHeight := g.Bounds.Height / float32(rows)

	g.Clear()


	g.SetStrokeWeight(1.0)
	y := float32(10.0)
	for range rows {
		for x := 10; x < int(g.Width()) - 10; x++ {
			fieldValue := l.Field.Get(float32(x), float32(y))
			c := rl.White
			c.A = uint8(rl.Remap(fieldValue, 0.0, 1.0, 10, 75))
			g.SetStrokeColor(c)
			strokeHeight := rl.Remap(fieldValue, 0.0, 1.0, 0, rowHeight * 10.0)
			a := sg.Point { X: float32(x), Y: float32(y) - strokeHeight / 2.0 }
			b := sg.Point { X: float32(x), Y: float32(y) + strokeHeight / 2.0 }
			g.DrawLine(a, b)
		}
		y += rowHeight 
	}

	l.Dirty = false

	g.EndBlend()
}

func (l *BlindsLayer) Update(env *Env, g *sg.Graphics) {

}

func (l *BlindsLayer) IsDirty() bool {
	return l.Dirty
}

