extends Node

var rootUi:RootUI = null
var interactIndicator:InteractIndicator = null

# True whenever any dialogue resource is being processed by DialogueManager.
# Driven by DialogueManager.dialogue_started / dialogue_ended signals.
var dialogueActive:bool = false

# True only during a CONVERSATION-mode sequence. Blocks player movement.
var activeConversation:bool = false

func _ready() -> void:
  DialogueManager.dialogue_started.connect(_onDialogueStarted)
  DialogueManager.dialogue_ended.connect(_onDialogueEnded)
  SCENE.sceneChanged.connect(_onSceneChanged)

func _onDialogueStarted(_resource:DialogueResource) -> void:
  dialogueActive = true

func _onDialogueEnded(_resource:DialogueResource) -> void:
  dialogueActive = false

func _onSceneChanged(_newScene:SceneSingleton.SceneType) -> void:
  _cleanupDialogue()

func _cleanupDialogue() -> void:
  if chatBoxContainer:
    for child in chatBoxContainer.get_children():
      if child is DialogueTextbox or child is DialogueChoiceBox:
        child.queue_free()
  activeConversation = false
  dialogueActive = false
  if INTERACT_INDICATOR:
    INTERACT_INDICATOR.clear()

var INTERACT_INDICATOR:InteractIndicator:
  get(): return interactIndicator

var chatBoxContainer:Control:
  get():
    if rootUi:
      return rootUi.chatBoxContainer
    return null

var DEBUG_MENU:DebugMenu:
  get():
    if rootUi:
      return rootUi.debugMenu
    return null

var GAME_MENU:GameMenu:
  get():
    if rootUi:
      return rootUi.gameMenu
    return null

var PAUSE_MENU:PauseMenu:
  get():
    if rootUi:
      return rootUi.pauseMenu
    return null

var QUIT_DIALOG:QuitConfirmDialog:
  get():
    if rootUi:
      return rootUi.quitConfirmDialog
    return null

var MAIN_MENU_DIALOG:ConfirmDialog:
  get():
    if rootUi:
      return rootUi.mainMenuConfirmDialog
    return null

var BACKDROP:ModalBackdrop:
  get():
    if rootUi:
      return rootUi.modalBackdrop
    return null
