#!/usr/bin/env bash
set -euo pipefail

self="$(readlink -f -- "$0")"
release_root="$(cd -- "$(dirname -- "$self")/.." && pwd)"
config_home="${XDG_CONFIG_HOME:-$HOME/.config}"
data_home="${XDG_DATA_HOME:-$HOME/.local/share}"
env_file="${TRIT_ENV_FILE:-$config_home/trit/env}"

if [[ -f "$env_file" ]]; then
  set -a
  # The installer owns this mode-0600 file; use KEY=VALUE entries only.
  # shellcheck disable=SC1090
  source "$env_file"
  set +a
fi

export NODE_ENV="${NODE_ENV:-production}"
export TRIT_AUTH_MODE="${TRIT_AUTH_MODE:-local}"
export TRIT_RUNTIME_ROOT="${TRIT_RUNTIME_ROOT:-$release_root/app}"
export TRIT_CONFIG="${TRIT_CONFIG:-$config_home/trit/config.yaml}"
export TRIT_DATA_DIR="${TRIT_DATA_DIR:-$data_home/trit}"
export PATH="$release_root/runtime/bin:$PATH"

node="$release_root/runtime/bin/node"
cli="$release_root/app/dist/server/cli.js"
server="$release_root/app/dist/server/server.js"

case "${1:-serve}" in
  serve)
    shift || true
    exec "$node" "$server" "$@"
    ;;
  start|stop|restart|status)
    action="$1"
    exec systemctl --user "$action" trit.service
    ;;
  logs)
    shift
    exec journalctl --user-unit trit.service --follow "$@"
    ;;
  update)
    temporary_installer="$(mktemp)"
    trap 'rm -f -- "$temporary_installer"' EXIT
    curl --fail --silent --show-error --location \
      "${TRIT_INSTALLER_URL:-https://trit.wtf/install}" \
      --output "$temporary_installer"
    bash "$temporary_installer"
    ;;
  uninstall)
    systemctl --user disable --now trit.service >/dev/null 2>&1 || true
    rm -f -- "${XDG_BIN_HOME:-$HOME/.local/bin}/trit"
    rm -f -- "$config_home/systemd/user/trit.service"
    rm -f -- "$data_home/trit/current"
    rm -rf -- "$data_home/trit/versions"
    systemctl --user daemon-reload >/dev/null 2>&1 || true
    echo "Removed Trit application releases. Configuration, backups, and the database were preserved."
    ;;
  *)
    exec "$node" "$cli" "$@"
    ;;
esac
