var AllowedFirstParts = {
    "package.json": true,
    dist: true,
    public: true,
    node_modules: true,
    bin: true,
};

var AllowedNodeModules = {
    // "lzma-native": true,
    // "fs-ext": true,
    // "fsevents": true,
    "monaco-editor": true,
};

var modCache = {};

function ignoreFn(path) {
    let parts = path.split("/");
    if (parts.length <= 1) {
        return false;
    }
    let firstPart = parts[1];
    if (!AllowedFirstParts[firstPart]) {
        return true;
    }
    if (firstPart == "node_modules") {
        if (parts.length <= 2) {
            return false;
        }
        if (parts.length > 3) {
            if (parts[3] == "build") {
                return true;
            }
        }
        let nodeModule = parts[2];
        if (!modCache[nodeModule]) {
            modCache[nodeModule] = true;
        }
        if (!AllowedNodeModules[nodeModule]) {
            return true;
        }
    }
    return false;
}

module.exports = {
    packagerConfig: {
        ignore: ignoreFn,
        files: [
            "package.json",
            "dist/*",
            "public/*",
            "node_modules/lzma-native/**",
            "node_modules/fs-ext/**",
            "node_modules/fsevents/**",
        ],
        icon: "public/waveterm.icns",
        osxNotarize: {
            tool: "notarytool",
            keychainProfile: "notarytool-creds",
        },
        osxSign: {
            "hardened-runtime": true,
            binaries: [
                "Contents/Resources/app/bin/wavesrv",
                "Contents/Resources/app/bin/mshell/mshell-v0.2-linux.amd64",
                "Contents/Resources/app/bin/mshell/mshell-v0.2-linux.arm64",
                "Contents/Resources/app/bin/mshell/mshell-v0.2-darwin.amd64",
                "Contents/Resources/app/bin/mshell/mshell-v0.2-darwin.arm64",
            ],
            identity: "VYQ48YC2N2",
        },
    },
    rebuildConfig: {},
    makers: [
        {
            name: "@electron-forge/maker-zip",
            platforms: ["darwin", "linux"],
        },
    ],
};