#!/bin/bash
# Universal PassengerRuby wrapper
# Default: ea-ruby27
# Override per-app via .alt-ruby-version

APP_ROOT="${PASSENGER_APP_ROOT:-$PWD}"
VERSION_FILE="$APP_ROOT/.alt-ruby-version"

EA_RUBY_BIN="/opt/cpanel/ea-ruby27/root/usr/libexec/passenger-ruby27"

MODE="ea"
VERSION="2.7"
VALUE=""

if [ -f "$VERSION_FILE" ]; then
    VALUE="$(tr -d ' \t\r\n' < "$VERSION_FILE")"
    case "$VALUE" in
        ea-* )
            MODE="ea"
            VERSION="${VALUE#ea-}"
            ;;
        alt-* )
            MODE="alt"
            VERSION="${VALUE#alt-}"
            ;;
        * )
            MODE="alt"
            VERSION="$VALUE"
            ;;
    esac
fi

# Keep requested values for logging even if we fallback later
REQ="${VALUE:-default}"
REQ_MODE="$MODE"
REQ_VERSION="$VERSION"

VERSION_CLEAN="$(echo "$VERSION" | sed 's/[^0-9.].*$//')"
MAJOR="${VERSION_CLEAN%%.*}"
REST="${VERSION_CLEAN#*.}"
MINOR="${REST%%.*}"
SHORT_VER="${MAJOR}${MINOR}"

if [ "$MODE" = "alt" ]; then
    RUBY_BIN="/opt/alt/ruby${SHORT_VER}/bin/alt-ruby${SHORT_VER}-passenger-wrapper"
else
    # we always fallback/use ea27 passenger wrapper
    RUBY_BIN="$EA_RUBY_BIN"
fi

LOG_ON="${PASSENGER_ALT_RUBY_WRAPPER_LOG:-1}"
log() {
  [ "$LOG_ON" != "0" ] && echo "$@" >&2
}

FALLBACK=0
REASON=""

# If requested ruby is missing -> fallback to EA 2.7
if [ ! -x "$RUBY_BIN" ]; then
    FALLBACK=1
    REASON="not_found"
    log "[passenger-alt-ruby-wrapper] WARN app_root=$APP_ROOT req=$REQ req_mode=$REQ_MODE req_version=$REQ_VERSION ruby_bin_missing=$RUBY_BIN -> fallback=$EA_RUBY_BIN"
    MODE="ea"
    VERSION="2.7"
    RUBY_BIN="$EA_RUBY_BIN"
fi

# If even EA ruby missing -> hard error
if [ ! -x "$RUBY_BIN" ]; then
    log "[passenger-alt-ruby-wrapper] ERROR app_root=$APP_ROOT req=$REQ effective_mode=$MODE effective_version=$VERSION ruby_bin_not_executable=$RUBY_BIN"
    exit 1
fi

log "[passenger-alt-ruby-wrapper] INFO app_root=$APP_ROOT req=$REQ req_mode=$REQ_MODE req_version=$REQ_VERSION effective_mode=$MODE effective_version=$VERSION fallback=$FALLBACK reason=${REASON:-none} ruby_bin=$RUBY_BIN pid=$$"

exec "$RUBY_BIN" "$@"
