#pragma once

#include <vector>

/*
    Namespace Stage: gestiona los datos y operaciones de las fases del juego.
    Permite consultar y modificar el poder necesario, la amenaza y el estado de cada fase.
*/

namespace Stage
{
    // --- Estructura con los datos de una fase ---
    struct Stage
    {
        int power_to_complete; // Cantidad de poder que se necesita para completar la fase
        int min_menace;        // Umbral mínimo de amenaza de la fase
        int max_menace;        // Umbral máximo de amenaza de la fase

        // Constructor
        Stage(int power_to_complete, int min_menace, int max_menace)
            : power_to_complete(power_to_complete), min_menace(min_menace), max_menace(max_menace) {}
    };

    // --- Variables globales del estado de las fases ---
    extern std::vector<Stage> stages; // Vector con los datos de cada pantalla
    extern int power;                 // Poder acumulado en la fase actual
    extern int total_power;           // Poder total necesario para completar el juego
    extern int number;                // Índice de la fase actual
    extern bool power_can_be_added;   // Indica si se puede añadir poder a la fase

    // --- Funciones principales ---
    Stage get(int index);      // Devuelve una fase por índice
    void init();               // Inicializa las variables del namespace Stage
    void addPower(int amount); // Añade poder a la fase actual
}