#!/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}"

_resolve_log_file() {
  if [ -n "${NOCTALIA_GREETER_LOG:-}" ]; then
    printf '%s' "${NOCTALIA_GREETER_LOG}"
    return 0
  fi
  for _path in \
    /var/log/noctalia-greeter.log \
    /var/lib/noctalia-greeter/greeter.log \
    /tmp/noctalia-greeter-greetd.log; do
    if touch "${_path}" 2>/dev/null; then
      printf '%s' "${_path}"
      return 0
    fi
  done
  printf '%s' /tmp/noctalia-greeter-greetd.log
}

LOG_FILE="$(_resolve_log_file)"
exec >>"${LOG_FILE}" 2>&1

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 "LOG_FILE=${LOG_FILE}"
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
export NOCTALIA_GREETER_LOG="${LOG_FILE}"
export WLR_LOG="${WLR_LOG:-info}"

echo "launch: ${COMPOSITOR_BIN} -- $*"
if command -v dbus-run-session >/dev/null 2>&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

echo "warn: dbus-run-session not found; starting compositor without a session bus."
exec env XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR}" \
  GREETER_BIN="${GREETER_BIN}" \
  NOCTALIA_GREETER_LOG="${NOCTALIA_GREETER_LOG}" \
  WLR_LOG="${WLR_LOG}" \
  "${COMPOSITOR_BIN}" -- "$@"
