#!/usr/bin/sh
set -eu

_session_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
GREETER_BIN="${NOCTALIA_GREETER_BIN:-${_session_dir}/noctalia-greeter}"
COMPOSITOR_BIN="${NOCTALIA_GREETER_COMPOSITOR_BIN:-${_session_dir}/noctalia-greeter-compositor}"

# Default: park stdout/stderr so wlroots/libseat do not paint the VT. Greeter
# logs go to syslog (journald / metalog / syslog-ng via the greetd service).
# NOCTALIA_GREETER_LOG=stderr|stdout|none|- → console debug (no redirect).
# NOCTALIA_GREETER_LOG=/path → file (+ syslog from the greeter).
_pass_log_env=0
case "${NOCTALIA_GREETER_LOG:-}" in
"" )
  exec >/dev/null 2>&1
  unset NOCTALIA_GREETER_LOG
  ;;
- | none | NONE | stderr | STDERR | stdout | STDOUT)
  export NOCTALIA_GREETER_LOG=stderr
  _pass_log_env=1
  ;;
*)
  _log_target="${NOCTALIA_GREETER_LOG}"
  if touch "${_log_target}" 2>/dev/null; then
    exec >>"${_log_target}" 2>&1
    export NOCTALIA_GREETER_LOG="${_log_target}"
    _pass_log_env=1
  else
    echo "warn: cannot write ${_log_target}; falling back to syslog-only" >&2
    exec >/dev/null 2>&1
    unset NOCTALIA_GREETER_LOG
  fi
  ;;
esac

echo "=== noctalia-greeter-session $(date -Iseconds) pid=$$ uid=$(id -u) euid=$(id -u -r 2>/dev/null || id -u) ==="
echo "GREETER_BIN=${GREETER_BIN}"
echo "COMPOSITOR_BIN=${COMPOSITOR_BIN}"
echo "NOCTALIA_GREETER_LOG=${NOCTALIA_GREETER_LOG:-syslog (fds parked)}"
echo "GREETD_SOCK=${GREETD_SOCK:-unset}"

_pam_runtime="${XDG_RUNTIME_DIR:-unset}"
XDG_RUNTIME_DIR="/tmp/noctalia-runtime-$(id -u)"
export XDG_RUNTIME_DIR
mkdir -p "${XDG_RUNTIME_DIR}"
chmod 700 "${XDG_RUNTIME_DIR}"

echo "XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} (pam=${_pam_runtime})"
echo "WAYLAND_DISPLAY=${WAYLAND_DISPLAY:-unset}"

unset WAYLAND_DISPLAY

if [ ! -x "${COMPOSITOR_BIN}" ]; then
  echo "error: compositor binary not found at ${COMPOSITOR_BIN}"
  exit 1
fi

if [ ! -x "${GREETER_BIN}" ]; then
  echo "error: greeter binary not found at ${GREETER_BIN}"
  exit 1
fi

export GREETER_BIN
# Raise log level with WLR_LOG=info when debugging (also set NOCTALIA_GREETER_LOG=stderr).
export WLR_LOG="${WLR_LOG:-error}"

echo "launch: ${COMPOSITOR_BIN} -- $*"
if command -v dbus-run-session >/dev/null 2>&1; then
  if [ "${_pass_log_env}" -eq 1 ]; then
    exec dbus-run-session -- env XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR}" \
      GREETER_BIN="${GREETER_BIN}" \
      NOCTALIA_GREETER_LOG="${NOCTALIA_GREETER_LOG}" \
      WLR_LOG="${WLR_LOG}" \
      "${COMPOSITOR_BIN}" -- "$@"
  fi
  exec dbus-run-session -- env XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR}" \
    GREETER_BIN="${GREETER_BIN}" \
    WLR_LOG="${WLR_LOG}" \
    "${COMPOSITOR_BIN}" -- "$@"
fi

echo "warn: dbus-run-session not found; starting compositor without a session bus."
if [ "${_pass_log_env}" -eq 1 ]; then
  exec env XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR}" \
    GREETER_BIN="${GREETER_BIN}" \
    NOCTALIA_GREETER_LOG="${NOCTALIA_GREETER_LOG}" \
    WLR_LOG="${WLR_LOG}" \
    "${COMPOSITOR_BIN}" -- "$@"
fi
exec env XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR}" \
  GREETER_BIN="${GREETER_BIN}" \
  WLR_LOG="${WLR_LOG}" \
  "${COMPOSITOR_BIN}" -- "$@"
