#!/bin/bash
#
# MSH Zimbra Rules command-line tool. Thin wrapper that runs msh-zr-cli.jar with the
# Java configured for this installation (MSH_JAVA_BIN in lib/defaults.cf, overridable
# in etc/config.cf) and passes all arguments through, e.g.:
#
#   mshctl --version
#   mshctl change-password admin
#
set -o pipefail

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
msh_home=$(realpath "$script_dir/..")

source "$msh_home/lib/defaults.cf"
[ -f "$msh_home/etc/config.cf" ] && source "$msh_home/etc/config.cf"

java_bin="${MSH_JAVA_BIN:-java}"
if [ ! -x "$java_bin" ]; then
  java_bin="$(command -v "$java_bin" 2>/dev/null || true)"
fi
if [ -z "$java_bin" ] || [ ! -x "$java_bin" ]; then
  echo "mshctl: MSH_JAVA_BIN ('${MSH_JAVA_BIN:-java}') does not point to a valid Java executable." >&2
  exit 1
fi

# Shared database path (a relative path is taken from the install dir), as in the web launcher.
case "$DB_FILENAME" in
  /*) db_path="$DB_FILENAME" ;;
  *)  db_path="$msh_home/$DB_FILENAME" ;;
esac

cli_jar="$msh_home/bin/jar/msh-zr-cli.jar"
if [ ! -f "$cli_jar" ]; then
  echo "mshctl: $cli_jar not found." >&2
  exit 1
fi

exec "$java_bin" \
  -Dfile.encoding=UTF8 \
  -jar "$cli_jar" \
  --msh.zr.install.dir="$msh_home" \
  --msh.zr.db.path="$db_path" \
  "$@"
