// entity_loader.hpp - Carregador genèric de descriptors d'entitats en YAML
// © 2026 JailDesigner
//
// Cada entitat viu a `data/entities/<name>/<name>.yaml` (mateix patró que el
// projecte germà aee_arcade). Aquest loader resol el path, llegeix del
// resource pack via Resource::Helper, parseja amb fkyaml i cacheja el node
// per evitar relectures. Retorna nullptr en cas d'error (el caller decideix
// si abortar).

#pragma once

#include <memory>
#include <string>
#include <unordered_map>

#include "external/fkyaml_node.hpp"

namespace Entities {

    class EntityLoader {
       public:
        EntityLoader() = delete;  // tot estàtic

        // Carrega el descriptor d'una entitat per nom (ex. "player" →
        // "entities/player/player.yaml"). Retorna nullptr si no es pot
        // carregar o parsejar. Cachejat per nom.
        static auto load(const std::string& name) -> std::shared_ptr<fkyaml::node>;

        // Buidar caché (útil per debug/recàrrega).
        static void clearCache();

        [[nodiscard]] static auto getCacheSize() -> size_t;

       private:
        static std::unordered_map<std::string, std::shared_ptr<fkyaml::node>> cache;
    };

}  // namespace Entities
