const { sync: commandExists } = require("command-exists");
const { exec, execSync } = require("child_process");

const validateRsync = (callback = () => {}) => {
  const rsyncCli = commandExists("rsync");
  if (rsyncCli) {
    console.log('⚠️ [CLI] Rsync exists', execSync("rsync --version"));
    return callback();
  }

  console.log('⚠️ [CLI] Rsync doesn\'t exists. Start installation with "apt-get" \n');
  try {
    execSync("sudo apt-get update");
  } catch (e) {
    console.log( "⚠️ [CLI] Cant run . apt-get update. Skipping ...". e.message);
  }

  exec("sudo apt-get --no-install-recommends install rsync", (err, data, stderr) => {
    if (err) {
      console.log("⚠️ [CLI] Rsync installation failed. Aborting ... ", err.message);
      process.abort();
    } else {
      console.log("✅ [CLI] Rsync installed. \n", data, stderr);
      callback();
    }
  });
};

const validateInputs = (inputs) => {
  const inputKeys = Object.keys(inputs);
  const validInputs = inputKeys.filter((inputKey) => {
    const inputValue = inputs[inputKey];

    if (!inputValue) {
      console.error(`⚠️ [INPUTS] ${inputKey} is mandatory`);
    }

    return inputValue;
  });

  if (validInputs.length !== inputKeys.length) {
    console.error("⚠️ [INPUTS] Inputs not valid, aborting ...");
    process.abort();
  }
};

module.exports = {
  validateRsync,
  validateInputs,
};