package state

import (
	"mvvasilev/last_light/engine"
	"mvvasilev/last_light/game/systems"
	"mvvasilev/last_light/game/ui"
)

type DialogState struct {
	inputSystem *systems.InputSystem
	turnSystem  *systems.TurnSystem

	prevState GameState

	dialog *ui.UIDialog

	returnToPreviousState bool
}

func CreateDialogState(inputSystem *systems.InputSystem, turnSystem *systems.TurnSystem, dialog *ui.UIDialog, prevState GameState) *DialogState {
	return &DialogState{
		inputSystem:           inputSystem,
		turnSystem:            turnSystem,
		prevState:             prevState,
		dialog:                dialog,
		returnToPreviousState: false,
	}
}

func (s *DialogState) InputContext() systems.InputContext {
	return systems.InputContext_Menu
}

func (ds *DialogState) OnTick(dt int64) GameState {
	if ds.inputSystem.NextAction() == systems.InputAction_Menu_Select {
		ds.returnToPreviousState = true
		ds.dialog.Select()
	}

	if ds.returnToPreviousState {
		return ds.prevState
	}

	return ds
}

func (ds *DialogState) CollectDrawables() []engine.Drawable {
	return append(ds.prevState.CollectDrawables(), ds.dialog)
}