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

SYSTEM_SERVICE="wakedesk.service"
DESKTOP_SERVICE="wakedesk-desktop.service"

SUDO=""
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
  SUDO="sudo"
fi

usage() {
  cat <<EOF
Usage: wakedeskctl <start|stop|restart|status|enable|disable|logs>

Controls both WakeDesk services:
  $SYSTEM_SERVICE   root background service for unattended access
  $DESKTOP_SERVICE  per-user desktop UI service for your graphical login
EOF
}

ensure_user_systemd() {
  if ! systemctl --user show-environment >/dev/null 2>&1; then
    echo "systemctl --user is not available in this shell/session." >&2
    echo "Run this from your logged-in desktop terminal." >&2
    exit 1
  fi
}

cmd="${1:-}"
case "$cmd" in
  start)
    $SUDO systemctl start "$SYSTEM_SERVICE"
    ensure_user_systemd
    systemctl --user daemon-reload
    systemctl --user start "$DESKTOP_SERVICE"
    ;;
  stop)
    ensure_user_systemd
    systemctl --user stop "$DESKTOP_SERVICE" 2>/dev/null || true
    pkill -f '/usr/lib/wakedesk/wakedesk$' 2>/dev/null || true
    $SUDO systemctl stop "$SYSTEM_SERVICE"
    ;;
  restart)
    "$0" stop
    "$0" start
    ;;
  status)
    echo "== System daemon =="
    systemctl status "$SYSTEM_SERVICE" --no-pager || true
    echo
    echo "== Desktop UI =="
    ensure_user_systemd
    systemctl --user status "$DESKTOP_SERVICE" --no-pager || true
    ;;
  enable)
    $SUDO systemctl enable --now "$SYSTEM_SERVICE"
    ensure_user_systemd
    systemctl --user daemon-reload
    systemctl --user enable --now "$DESKTOP_SERVICE"
    ;;
  disable)
    ensure_user_systemd
    systemctl --user disable --now "$DESKTOP_SERVICE" 2>/dev/null || true
    $SUDO systemctl disable --now "$SYSTEM_SERVICE" 2>/dev/null || true
    ;;
  logs)
    echo "== System daemon logs =="
    journalctl -u "$SYSTEM_SERVICE" -n 120 --no-pager || true
    echo
    echo "== Desktop UI logs =="
    ensure_user_systemd
    journalctl --user -u "$DESKTOP_SERVICE" -n 120 --no-pager || true
    ;;
  -h|--help|"")
    usage
    ;;
  *)
    echo "Unknown command: $cmd" >&2
    usage
    exit 1
    ;;
esac
