"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GamesystemLoader = void 0;
const StoreComponent_1 = require("../StoreComponent");
const FileUtils_1 = require("../FileUtils");
const fs = require("fs");
const path = require("node:path");
const ModelComponentType_1 = require("../../../src/app/project/game-model/ModelComponentType");
class GamesystemLoader {
    constructor(gamesystemDir) {
        this.gamesystemDir = gamesystemDir;
    }
    loadGamesystems() {
        return this.loadGamesystemsRecursivly(this.gamesystemDir);
    }
    loadGamesystemsRecursivly(currentGamesystemDir) {
        let loadedGamesystems = [];
        const gamesystemFiles = FileUtils_1.FileUtils.listFilesInDirectory(currentGamesystemDir);
        gamesystemFiles.forEach(gamesystemFile => {
            if (fs.lstatSync(gamesystemFile).isDirectory()) {
                const childGamesystems = this.loadGamesystemsRecursivly(gamesystemFile);
                loadedGamesystems = loadedGamesystems.concat(childGamesystems);
            }
            else if (path.basename(gamesystemFile).endsWith(".json")) {
                const loadedGamesystem = this.loadGamesystem(gamesystemFile);
                if (loadedGamesystem != undefined) {
                    loadedGamesystems.push(loadedGamesystem);
                }
            }
        });
        return loadedGamesystems;
    }
    loadGamesystem(gamesystemFile) {
        if (gamesystemFile.endsWith(".json")) {
            const gamesystemData = fs.readFileSync(gamesystemFile, 'utf-8');
            return new StoreComponent_1.StoreComponent(gamesystemData, gamesystemFile, ModelComponentType_1.ModelComponentType.GAMESYTEM);
        }
    }
}
exports.GamesystemLoader = GamesystemLoader;
//# sourceMappingURL=GamesystemLoader.js.map