#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
    {
        INIT,           // Inicialización
        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,           // Jugar 1 jugador
        GAME_PLAY_2P,           // Jugar 2 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
        QUIT_WITH_KEYBOARD,     // Salir con teclado
        QUIT_WITH_CONTROLLER,   // Salir con mando
        QUIT_FROM_EVENT,        // Salir por evento
        RELOAD,                 // Recargar sección
        HI_SCORE_AFTER_PLAYING, // Mostrar récord tras jugar
        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 ---
    extern Name name;                // Sección actual
    extern Options options;          // Opción seleccionada en la sección
    extern AttractMode attract_mode; // Estado del Attract Mode
}