// stage_loader.hpp - Carregador de configuración YAML
// © 2025 Orni Attack

#pragma once

#include <memory>
#include <string>

#include "external/fkyaml_node.hpp"
#include "stage_config.hpp"

namespace StageSystem {

class StageLoader {
    public:
        // Carregar configuración desde file YAML
        // Retorna nullptr si hay errors
        static std::unique_ptr<StageSystemConfig> load(const std::string& path);

    private:
        // Parsing helpers (implementats en .cpp)
        static bool parse_metadata(const fkyaml::node& yaml, MetadataStages& meta);
        static bool parse_stage(const fkyaml::node& yaml, StageConfig& stage);
        static bool parse_spawn_config(const fkyaml::node& yaml, ConfigSpawn& config);
        static bool parse_distribution(const fkyaml::node& yaml, DistribucioEnemics& dist);
        static bool parse_multipliers(const fkyaml::node& yaml, MultiplicadorsDificultat& mult);
        static ModeSpawn parse_spawn_mode(const std::string& mode_str);

        // Validació
        static bool validar_config(const StageSystemConfig& config);
};

}  // namespace StageSystem
