#pragma once

#include <cstdint>  // Para uint8_t

/*
    Namespace SceneManager: gestiona el flujo entre las diferentes escenas del juego.

    Define las escenas principales del programa y las opciones de transición entre ellas.
    Proporciona variables globales inline para gestionar el estado actual de la escena.
*/

namespace SceneManager {

    // --- Escenas del programa ---
    enum class Scene : std::uint8_t {
        BOOT_LOADER,      // Carga inicial de recursos dirigida por iterate()
        LOGO,             // Pantalla del logo
        LOADING_SCREEN,   // Pantalla de carga
        TITLE,            // Pantalla de título/menú principal
        CREDITS,          // Créditos del juego
        GAME,             // Juego principal
        DEMO,             // Modo demostración
        GAME_OVER,        // Pantalla de game over
        ENDING,           // Final del juego (ending 1)
        ENDING2,          // Final del juego (ending 2)
        RESTART_CURRENT,  // Especial: reinicia la escena que estaba corriendo
        QUIT              // Salir del programa
    };

    // --- Opciones para transiciones entre escenas ---
    enum class Options : std::uint8_t {
        NONE,                         // Sin opciones especiales
        LOGO_TO_LOADING_SCREEN,       // Del logo a la intro
        LOGO_TO_TITLE,                // Del logo al título
        TITLE_WITH_LOADING_SCREEN,    // Al título mostrando pantalla de carga
        TITLE_WITHOUT_LOADING_SCREEN  // Al título sin pantalla de carga
    };

    // --- Variables de estado globales ---
    inline Scene current = Scene::BOOT_LOADER;                 // Arranca siempre cargando recursos; Director conmuta a LOGO al terminar
    inline Options options = Options::LOGO_TO_LOADING_SCREEN;  // Opciones de la escena actual
    inline Scene scene_before_restart = Scene::LOGO;           // escena a relanzar tras RESTART_CURRENT

}  // namespace SceneManager
