package inc

import (
	inkwell "git.teletypegames.org/engines/inkwell"
	"github.com/hajimehoshi/ebiten/v2"
	"github.com/hajimehoshi/ebiten/v2/inpututil"
)

func init() {
	WidgetManager.Register(&sceneNav{
		Name: "scene_nav",
	})
}

type sceneNav struct {
	Name string
}

func (n *sceneNav) GetName() string                            { return n.Name }
func (n *sceneNav) Layer() inkwell.Layer                       { return inkwell.LayerScene }
func (n *sceneNav) Draw(dst *ebiten.Image, ctx *inkwell.UICtx) {}

func (n *sceneNav) Tick(ctx *inkwell.UICtx) {
	if !World.HUDVisible() || World.Paused() {
		return
	}
	step := 0

	switch {
	case inpututil.IsKeyJustPressed(ebiten.KeyArrowRight):
		step = 1
	case inpututil.IsKeyJustPressed(ebiten.KeyArrowLeft):
		step = -1
	default:
		return
	}
	if next := n.neighbour(ctx.Game, step); next != "" {
		World.Do(inkwell.GoTo(next))
	}
}

func (n *sceneNav) neighbour(g *inkwell.Game, step int) string {
	deck := g.SceneManager.Names()
	if len(deck) < 2 {
		return ""
	}
	for i, name := range deck {
		if name == World.G.CurrentScene() {
			return deck[((i+step)%len(deck)+len(deck))%len(deck)]
		}
	}
	return deck[0]
}
