#pragma once

/*
    Namespace section: define los estados/secciones principales del programa,
    así como las opciones y modos especiales (como el Attract Mode).
    Proporciona variables globales para gestionar el flujo entre secciones.
*/

namespace Section {
    // --- Enumeraciones de secciones del programa ---
    enum class Name {
        RESET,           // Inicialización
        PRELOAD,         // Carga incremental de recursos
        LOGO,            // Pantalla de logo
        INTRO,           // Introducción
        TITLE,           // Pantalla de título/menú principal
        GAME,            // Juego principal
        HI_SCORE_TABLE,  // Tabla de récords
        GAME_DEMO,       // Modo demo
        INSTRUCTIONS,    // Instrucciones
        CREDITS,         // Créditos
        QUIT,            // Salir del juego
    };

    // --- Opciones para la sección actual ---
    enum class Options {
        GAME_PLAY_1P,            // Iniciar el juego con el jugador 1
        GAME_PLAY_2P,            // Iniciar el juego con el jugador 2
        GAME_PLAY_BOTH,          // Iniciar el juego con los dos jugadores
        TITLE_TIME_OUT,          // Timeout en el título
        TITLE_1,                 // Opción 1 en el título
        TITLE_2,                 // Opción 2 en el título
        RELOAD,                  // Recargar sección
        HI_SCORE_AFTER_PLAYING,  // Mostrar récord tras jugar
        SHUTDOWN,                // Apagar el sistema
        NONE,                    // Sin opción
    };

    // --- Modos para el Attract Mode ---
    enum class AttractMode {
        TITLE_TO_DEMO,  // Pasar de título a demo
        TITLE_TO_LOGO,  // Pasar de título a logo
    };

    // --- Variables globales de estado ---
    inline Name name = Name::RESET;
    inline Name post_preload = Name::LOGO;  // Sección a la que transiciona PRELOAD al terminar
    inline Options options = Options::NONE;
    inline AttractMode attract_mode = AttractMode::TITLE_TO_DEMO;
}  // namespace Section