#!/bin/bash
ROOT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )
set -e

# If we're executing from /usr then we should update the root directory
# to our default installation path and we should be allowed to sudo.
if [ $ROOT_DIR == "/usr" ]; then
  SHOULD_SUDO="yes"
  ROOT_DIR=/opt/postal/app
else
  SHOULD_SUDO="no"
fi

# If we we can sudo and the current user isn't postal, then automatically
# run commands as the postal user
if [ $SHOULD_SUDO == "yes" ] && [ $USER != "postal" ]; then
    run() {
        HOME=/opt/postal
        eval "sudo -u postal $1"
    }
else
    run() {
        eval $1
    }
fi

# Enter the root directory
cd $ROOT_DIR

# Run the right command
case "$1" in
    start)
        run "bundle exec ruby script/update_process_concurrency.rb"
        run "procodile start"
        ;;

    stop)
        run "procodile stop -s --wait"
        ;;

    restart)
        run "bundle exec ruby script/update_process_concurrency.rb"
        run "procodile restart"
        ;;

    status)
        run "procodile status"
        ;;

    run)
        run "bundle exec ruby script/update_process_concurrency.rb"
        run "LOG_TO_STDOUT=1 procodile start -f --no-respawn --stop-when-none"
        ;;

    upgrade)
        run "bundle exec rake assets:precompile db:migrate"
        ;;

    console)
        run "bundle exec rails console"
        ;;

    initialize-config)
        run "bundle exec ruby script/generate_initial_config.rb"
        ;;

    initialize)
        run "bundle exec rake assets:precompile db:schema:load db:seed"
        ;;

    default-dkim-record)
        run "bundle exec ruby script/default_dkim_record.rb"
        ;;

    register-lets-encrypt)
        run "bundle exec ruby script/register_lets_encrypt.rb $2"
        ;;

    auto-upgrade)
        run "ruby script/auto_upgrade.rb"
        ;;

    make-user)
        run "bundle exec ruby script/make_user.rb"
        ;;

    test-app-smtp)
        run "bundle exec ruby script/test_app_smtp.rb $2"
        ;;

    bundle)
        if [ -n "$2" ]; then
          run "bundle install --path=$2 --without=development --jobs=4 --clean"
        else
          echo "usage: $0 bundle path/to/vendor/dir"
          exit 1
        fi
        ;;

    version)
        run "bundle exec ruby script/version.rb"
        ;;

    *)
        echo $"Usage: $0 [command]"
        echo
        echo "Frequently used commands:"
        echo -e " * \e[35mstart|stop|restart\e[0m - start/stop/restart Postal in background"
        echo -e " * \e[35mstatus\e[0m - show the current status of Postal"
        echo -e " * \e[35mrun\e[0m - run Postal in the foreground"
        echo -e " * \e[35mversion\e[0m - show the current Postal version"
        echo
        echo "Other commands:"
        echo -e " * \e[35mconsole\e[0m - open a Postal system console (debug only)"
        echo -e " * \e[35mauto-upgrade\e[0m - upgrade to the latest version of Postal"
        echo -e " * \e[35minitialize-config\e[0m - initialize a new config directory"
        echo -e " * \e[35minitialize\e[0m - generate assets and load the database for the first time"
        echo -e " * \e[35mdefault-dkim-record\e[0m - show the default DKIM DNS record"
        echo -e " * \e[35mregister-lets-encrypt\e[0m - register the generated Let's Encrypt key"
        echo -e " * \e[35mupgrade\e[0m - upgrade the Postal installation"
        echo -e " * \e[35mbundle\e[0m - download & install all required Ruby dependencies"
        echo -e " * \e[35mmake-user\e[0m - create a new admin user"
        echo
esac
