// bullet_registry.hpp - Registre estàtic de configuracions de bala
// © 2026 JailDesigner
//
// Diverses configuracions per nom (data/entities/<name>/<name>.yaml). El
// config "bullet" es manté com a default històric (player) i es carrega via
// load(). Els altres (ex. "bullet_long" per a bales d'enemic) es carreguen
// peresosament la primera vegada que algú els demana per nom.

#pragma once

#include <string>
#include <unordered_map>

#include "game/entities/bullet_config.hpp"

class BulletRegistry {
   public:
    BulletRegistry() = delete;

    // Carrega data/entities/bullet/bullet.yaml com a default. Retorna false si falla.
    static auto load() -> bool;

    // Accés a la configuració per defecte ("bullet"). Avorta amb log fatal si
    // load() no s'ha cridat o ha fallat. Mantingut per a backwards compat del Bullet ctor.
    static auto get() -> const BulletConfig&;

    // Accés a una configuració per nom. Lazy-load: si no està al map, intenta
    // carregar data/entities/<name>/<name>.yaml. Retorna nullptr si no es pot.
    static auto get(const std::string& name) -> const BulletConfig*;

   private:
    static std::unordered_map<std::string, BulletConfig> configs;
    static bool loaded;
};
