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

usage() {
  cat <<'EOF'
Usage:
  node-site-runner DOMAIN
  node-site-runner --help
EOF
}

[[ $# -eq 1 ]] || { usage; exit 2; }
[[ "$1" != "--help" && "$1" != "-h" ]] || { usage; exit 0; }

domain="$1"
env_file="/etc/node-sites/$domain.env"
[[ -f "$env_file" ]] || { echo "Env file not found: $env_file" >&2; exit 1; }

# shellcheck disable=SC1090
source "$env_file"

: "${SITE_ROOT:?SITE_ROOT is required}"
: "${NODE_VERSION:?NODE_VERSION is required}"
: "${PORT:?PORT is required}"

RUN_USER="${RUN_USER:-$(id -un)}"
HOST="${HOST:-127.0.0.1}"
NODE_ENV="${NODE_ENV:-production}"
START_COMMAND="${START_COMMAND:-npm start}"
workdir="$SITE_ROOT/current"
[[ -d "$workdir" ]] || workdir="$SITE_ROOT"

printf -v shell_cmd 'cd %q; set -a; [ -f ./.env ] && . ./.env || true; [ -f ./.env.local ] && . ./.env.local || true; set +a; export HOST=%q PORT=%q NODE_ENV=%q; exec %s' "$workdir" "$HOST" "$PORT" "$NODE_ENV" "$START_COMMAND"
exec /usr/local/bin/node-with-fnm --user "$RUN_USER" --version "$NODE_VERSION" --shell-command "$shell_cmd"
