// stage_loader.hpp - Carregador de configuració 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ó des de file YAML.
        // Retorna nullptr si hi ha errors.
        static auto load(const std::string& path) -> std::unique_ptr<StageSystemConfig>;

       private:
        static auto parseMetadata(const fkyaml::node& yaml, MetadataStages& meta) -> bool;
        static auto parseStage(const fkyaml::node& yaml, StageConfig& stage) -> bool;
        static auto parseMultipliers(const fkyaml::node& yaml, MultiplicadorsDificultat& mult) -> bool;
        static auto parseWave(const fkyaml::node& yaml, WaveConfig& wave) -> bool;
        static auto parseEnemyType(const std::string& type_str, EnemyType& out) -> bool;
        static auto parseNext(const fkyaml::node& yaml, WaveNext& next) -> bool;

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

}  // namespace StageSystem
