// stage_loader.hpp - Carregador de configuración YAML
// © 2026 JailDesigner

#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 auto load(const std::string& path) -> std::unique_ptr<StageSystemConfig>;

    private:
        // Parsing helpers (implementats en .cpp)
        static auto parseMetadata(const fkyaml::node& yaml, MetadataStages& meta) -> bool;
        static auto parseStage(const fkyaml::node& yaml, StageConfig& stage) -> bool;
        static auto parseSpawnConfig(const fkyaml::node& yaml, ConfigSpawn& config) -> bool;
        static auto parseDistribution(const fkyaml::node& yaml, DistribucioEnemics& dist) -> bool;
        static auto parseMultipliers(const fkyaml::node& yaml, MultiplicadorsDificultat& mult) -> bool;
        static auto parseSpawnMode(const std::string& mode_str) -> ModeSpawn;

        // Validació
        static auto validateConfig(const StageSystemConfig& config) -> bool;
};

}  // namespace StageSystem
