import fs from 'fs'
import ModUtils from '../modUtils.js';

const modules = await Promise.all(fs.readdirSync("./patches").flatMap(fileName => {
    if (fileName === "main.js") return [];
    else return import("./" + fileName);
}));

const requiredVariables = new Set(modules.map(module => module.requiredVariables ?? []).flat());

export default function applyPatches(/** @type {ModUtils} */ modUtils) {
    const dictionary = modUtils.dictionary;

    requiredVariables.forEach(varName => {
        if (!dictionary.hasOwnProperty(varName)) {
            throw new Error(`"${varName}" is required by a module but not defined the dictionary`);
        }
    });

    // apply patches (default exported function)
    modules.forEach(module => module.default(modUtils))
}