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

export PATH="/usr/sbin:/usr/bin:/sbin:/bin"

SYNCWERK_USER="${SYNCWERK_USER:-syncwerk}"
CONFIG_DIR="${CONFIG_DIR:-/etc/syncwerk}"
CCNET_CONF_DIR="${CCNET_CONF_DIR:-${CONFIG_DIR}}"
SYNCWERK_CONF_DIR="${SYNCWERK_CONF_DIR:-${CONFIG_DIR}}"
SYNCWERK_CENTRAL_CONF_DIR="${SYNCWERK_CENTRAL_CONF_DIR:-${CONFIG_DIR}}"
RESTAPI_DIR="${RESTAPI_DIR:-/usr/share/python/syncwerk/restapi}"
RESTAPI_PYTHON="${RESTAPI_PYTHON:-/usr/bin/python3}"
RESTAPI_MANAGE="${RESTAPI_MANAGE:-${RESTAPI_DIR}/manage.py}"
RESTAPI_LOG_DIR="${RESTAPI_LOG_DIR:-/var/log/syncwerk}"
OBJECT_STORAGE_PATH="${OBJECT_STORAGE_PATH:-/var/lib/syncwerk}"
SYNCWERK_PYTHON_ROOT="${SYNCWERK_PYTHON_ROOT:-/usr/share/python/syncwerk}"
LIBEVENT_ROOT="${LIBEVENT_ROOT:-/usr/lib/syncwerk/libevent}"
DJANGO_SETTINGS_MODULE="${DJANGO_SETTINGS_MODULE:-restapi.settings}"
SYNCWERK_RESTAPI_PYTHONPATH="${SYNCWERK_RESTAPI_PYTHONPATH:-${RESTAPI_DIR}:${SYNCWERK_PYTHON_ROOT}}"
PYTHONNOUSERSITE="${PYTHONNOUSERSITE:-1}"

usage() {
    cat <<'EOF_USAGE'
Usage: syncwerk-server-manage-py <manage.py-command> [args...]

Runs the packaged Syncwerk RESTAPI Django manage.py with the same runtime
environment used by syncwerk-server-admin-setup.

Examples:
  syncwerk-server-manage-py check
  syncwerk-server-manage-py migrate --noinput
  syncwerk-server-manage-py shell

Environment overrides:
  SYNCWERK_USER
  CONFIG_DIR
  CCNET_CONF_DIR
  SYNCWERK_CONF_DIR
  SYNCWERK_CENTRAL_CONF_DIR
  RESTAPI_DIR
  RESTAPI_PYTHON
  RESTAPI_MANAGE
  SYNCWERK_RESTAPI_PYTHONPATH
EOF_USAGE
}

fail() {
    printf 'syncwerk-server-manage-py: ERROR: %s\n' "$*" >&2
    exit 1
}

if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
    usage
    exit 0
fi

[[ $# -gt 0 ]] || {
    usage >&2
    exit 2
}

[[ -x "$RESTAPI_PYTHON" ]] || fail "python interpreter not executable: ${RESTAPI_PYTHON}"
[[ -f "$RESTAPI_MANAGE" ]] || fail "manage.py not found: ${RESTAPI_MANAGE}"

export CONFIG_DIR CCNET_CONF_DIR SYNCWERK_CONF_DIR SYNCWERK_CENTRAL_CONF_DIR
export RESTAPI_DIR RESTAPI_LOG_DIR OBJECT_STORAGE_PATH LIBEVENT_ROOT
export DJANGO_SETTINGS_MODULE PYTHONNOUSERSITE
export PYTHONPATH="${SYNCWERK_RESTAPI_PYTHONPATH}"

if [[ "$(id -u)" -eq 0 ]] && id "$SYNCWERK_USER" >/dev/null 2>&1; then
    exec sudo -E -u "$SYNCWERK_USER" env \
        CONFIG_DIR="$CONFIG_DIR" \
        CCNET_CONF_DIR="$CCNET_CONF_DIR" \
        SYNCWERK_CONF_DIR="$SYNCWERK_CONF_DIR" \
        SYNCWERK_CENTRAL_CONF_DIR="$SYNCWERK_CENTRAL_CONF_DIR" \
        RESTAPI_DIR="$RESTAPI_DIR" \
        RESTAPI_LOG_DIR="$RESTAPI_LOG_DIR" \
        OBJECT_STORAGE_PATH="$OBJECT_STORAGE_PATH" \
        LIBEVENT_ROOT="$LIBEVENT_ROOT" \
        DJANGO_SETTINGS_MODULE="$DJANGO_SETTINGS_MODULE" \
        PYTHONNOUSERSITE="$PYTHONNOUSERSITE" \
        PYTHONPATH="$PYTHONPATH" \
        "$RESTAPI_PYTHON" "$RESTAPI_MANAGE" "$@"
fi

exec "$RESTAPI_PYTHON" "$RESTAPI_MANAGE" "$@"
