#!/usr/bin/env bash

# Ensure CLI is installed
# shellcheck disable=SC2164
cd ./cli
if [[ ! -d node_modules ]]; then
    echo "Installing the cli...";
    pnpm install;
    echo "";
fi
cd ../;

# Run a build if requested
if [[ "${1}" = "build" ]]; then
    # shellcheck disable=SC2164
    cd ./cli;
    pnpm build;
    exit;
fi

# Run eslint if requested
if [[ "${1}" = "eslint" ]]; then
    cd ./cli;
    NODE_OPTIONS="--trace-warnings" pnpm lint --max-warnings=0;
    exit;
fi

# Run in dev mode if requested
if [[ "${1}" = "dev-mode" ]]; then
    # Send all arguments except the first one
    ./cli/bin/dev "${@:2}";
    exit;
fi

# Build new CLI if the cli/src directory has changed since last build
LATEST_BUILD_HASH_FILE=$(pwd)/cli/.latest-build-hash;
touch "${LATEST_BUILD_HASH_FILE}";
LATEST_BUILD_HASH=$(<"${LATEST_BUILD_HASH_FILE}");
LATEST_SRC_DIR_HASH=$(find cli/src/ -type f -exec md5sum {} \; | md5sum);

if [[ "${LATEST_SRC_DIR_HASH}" != "${LATEST_BUILD_HASH}" ]]; then
    cd ./cli;
    echo 'CLI source files have changed since last build. Building a fresh CLI now…';
    pnpm build;
    echo "${LATEST_SRC_DIR_HASH}" > "${LATEST_BUILD_HASH_FILE}";
    echo '';
    cd ../;
fi

# Otherwise, run the CLI
./cli/bin/run "${@}";
