// enemy_registry.hpp - Registre estàtic de configuracions d'enemics per tipus
// © 2026 JailDesigner
//
// Carrega els 3 fitxers YAML (pentagon, square, pinwheel) un cop al startup
// i exposa el lookup per EnemyType. Pensat per a ser invocat des de
// GameScene; si la càrrega falla, el caller decideix avortar.

#pragma once

#include "game/entities/enemy.hpp"
#include "game/entities/enemy_config.hpp"

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

    // Carrega els 3 descriptors. Retorna true si tots tres s'han carregat
    // i parsejat correctament. Cridar abans del primer get().
    static auto loadAll() -> bool;

    // Lookup. Cal haver cridat loadAll() abans. Si el tipus no s'ha carregat
    // (loadAll fallida o no cridada), avorta amb log fatal.
    static auto get(EnemyType type) -> const EnemyConfig&;

   private:
    static EnemyConfig pentagon_config;
    static EnemyConfig square_config;
    static EnemyConfig pinwheel_config;
    static EnemyConfig star_config;
    static EnemyConfig orb_config;
    static bool loaded;
};
