import chalk from "chalk";
import { spawn } from "child_process";
import { getEnvs } from "./env";
import { Envs } from "./types";

export const getEnvString = (envs: Envs) =>
  Object.entries(envs).reduce((acc, [k, v]) => `${acc} ${k}=${v}`, "");

export const run = async (userCmd: string[]) => {
  if (userCmd.length === 0) {
    console.error(chalk.red("Command required to run"));
    process.exit(1);
  }

  try {
    const envs = await getEnvs();

    const cmd = process.argv[3];
    const options = process.argv.slice(4);

    const cp = spawn(cmd, options, {
      stdio: "inherit",
      env: {
        ...process.env,
        ...envs,
      },
    });

    cp.on("error", err => {
      if (err) {
        console.error(chalk.red(err.message));
        process.exit(1);
      }

      process.exit(1);
    });

    cp.on("exit", code => {
      process.exit(code ?? 0);
    });
  } catch (e) {
    console.error(chalk.red(e.message));
    process.exit(1);
  }
};
