import { execSync, execFileSync, type ExecSyncOptions } from "child_process";
import colors from "../utils/console-colors";

/**
 * ## Preflight Function
 * @param {string[] | string} preflight
 * @param {boolean} [postflight]
 * @returns {boolean}
 */
export default function preflightFn(
    preflight?: string[] | string,
    postflight?: boolean
): boolean {
    const tag = postflight ? "Postflight" : "Preflight";
    console.log(`${tag} Running ...`);

    const options: ExecSyncOptions = {
        cwd: process.cwd(),
        stdio: "inherit",
    };

    try {
        if (typeof preflight == "string") {
            execFileSync(preflight, options);
        } else if (typeof preflight == "object" && preflight?.[0]) {
            for (let i = 0; i < preflight.length; i++) {
                const cmd = preflight[i];
                try {
                    const execCmd = execSync(cmd, options);
                } catch (error: any) {
                    console.log(
                        `${colors.FgRed}Error:${colors.Reset} ${tag} command ${cmd} Failed! => ${error.message}`
                    );
                    return false;
                    break;
                }
            }
        }
        return true;
    } catch (error: any) {
        console.log(
            `${colors.FgRed}Error:${colors.Reset} ${tag} Failed! => ${error.message}`
        );
        return false;
    }
}