/*
 *               dotfiles - subprocessRunner.ts
 *
 *   Created by Janis Hutz 03/22/2025, Licensed under the GPL V3 License
 *           https://janishutz.com, development@janishutz.com
 *
 *
 */

import { subprocess, execAsync, Process } from "astal/process";

// TODO: Get cwd and the likes to then use that to run JavaScript files with node / python with python, etc

/**
 * Run a subprocess. If you simply want to run a command that doesn't need continuous updates
 * run executeCommand instead.
 * @param cmd - The command to be run
 * @param onOut - Calback function for stdout of the subprocess
 * @param onErr - [TODO:description]
 * @returns [TODO:return]
 */
const startSubProcess = (
    cmd: string | string[],
    onOut: (stdout: string) => void,
    onErr: (stderr: string) => void | undefined,
): Process => {
    return subprocess( cmd, onOut, onErr );
};

/**
 * Run a command. If you need continuous updates, run startSubProcess instead 
 * @param cmd - The command to be run. Either a string or an array of strings
 * @returns A Promise resolving to stdout of the command
 */
const executeCommand = (cmd: string | string[]): Promise<string> => {
    return execAsync( cmd );
};


export default {
    startSubProcess,
    executeCommand
}
