// @ts-check
const fs = require("fs");

const isLocal = process.env.NEXT_PUBLIC_DSQL_LOCAL || null;
const production = process.env.NODE_ENV == "production";
const isBuilding = process.env.BUILDING_APP;

/**
 * # Grab the current distribution directory
 * @description This returns the relative path from the CWD. Eg `./.dist/build-1`
 * @returns {string | undefined}
 */
function grabDist() {
    if (isLocal) {
        return ".local_dist";
    }

    if (isBuilding) {
        if (!fs.existsSync("./.dist")) fs.mkdirSync("./.dist");

        if (!fs.existsSync("./.dist/BUILD")) {
            fs.writeFileSync("./.dist/BUILD", "0", "utf-8");
        }

        const distDir = (() => {
            if (isLocal) return ".local_dist";

            try {
                const buildNumber = fs.readFileSync("./.dist/BUILD", "utf-8");
                const newBuildNumber = Number(buildNumber) + 1;

                if (newBuildNumber < 0) {
                    throw new Error("Invalid Build Number");
                }
                fs.writeFileSync("./.dist/BUILD", String(newBuildNumber));
                return `.dist/build-${newBuildNumber}`;
            } catch (/** @type {*} */ error) {
                console.log("Build Number Generation Error =>", error.message);
                process.exit();
            }
        })();

        return distDir;
    }

    if (production) {
        const distDir = (() => {
            if (isLocal) return ".local_dist";

            try {
                const buildNumber = fs.readFileSync("./.dist/BUILD", "utf-8");
                return `.dist/build-${buildNumber}`;
            } catch (/** @type {*} */ error) {
                console.log("Build Number Parse Error =>", error.message);
                process.exit();
            }
        })();

        return distDir;
    }

    return undefined;
}

module.exports = grabDist;
