#pragma once

/*
    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 {
        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 {
        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 ---
#ifdef _DEBUG
    inline Scene current = Scene::GAME;                        // Escena actual
    inline Options options = Options::LOGO_TO_LOADING_SCREEN;  // Opciones de la escena actual
#else
    inline Scene current = Scene::LOGO;                        // Escena actual
    inline Options options = Options::LOGO_TO_LOADING_SCREEN;  // Opciones de la escena actual
#endif
    inline Scene scene_before_restart = Scene::LOGO;  // escena a relanzar tras RESTART_CURRENT

}  // namespace SceneManager
