#pragma once

#include <string>

#include "GameConfig.h"

// Parses all simulation TOML files from a directory and returns a fully
// populated, immutable GameConfig. Throws std::runtime_error on any parse or
// validation failure; the exception message identifies the offending file,
// field, or formula (see architecture.md "Config Loading").
//
// Per-file helpers are exposed so tests can exercise individual loaders in
// isolation.
class ConfigLoader
{
public:
    static GameConfig loadFromDirectory(const std::string& configDir);

    static WorldConfig loadWorld(const std::string& path);
    static BuildingsConfig loadBuildings(const std::string& path);
    static RecipesConfig loadRecipes(const std::string& path);
    static ShipsConfig loadShips(const std::string& path);
    static StationsConfig loadStations(const std::string& path);
    static ModulesConfig loadModules(const std::string& path);
    static UnlocksConfig loadUnlocks(const std::string& path);
};
