#!/usr/bin/env bash
# Printora Fleet Agent — Linux installer (systemd)
# Usage: sudo ./install-linux.sh --token YOUR_AGENT_TOKEN --url https://printora.example.com
set -euo pipefail

TOKEN="" ; URL="" ; NETWORK=""
while [[ $# -gt 0 ]]; do
  case "$1" in
    --token)  TOKEN="$2"; shift 2 ;;
    --url)    URL="$2";   shift 2 ;;
    --network) NETWORK="$2"; shift 2 ;;
    *) echo "Unknown arg: $1"; exit 1 ;;
  esac
done
[[ -z "$TOKEN" || -z "$URL" ]] && { echo "--token and --url required"; exit 1; }

INSTALL_DIR=/opt/printora-agent
echo "[printora] installing to $INSTALL_DIR"

mkdir -p "$INSTALL_DIR" /etc/printora-agent

# Copy agent source from this directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cp "$SCRIPT_DIR/printora_agent.py" "$INSTALL_DIR/"

# Python + deps
if ! command -v python3 >/dev/null; then
  echo "[printora] python3 not found — install it first: apt install python3 python3-venv || dnf install python3"
  exit 1
fi
python3 -m venv "$INSTALL_DIR/venv" 2>/dev/null || true
PIP="$INSTALL_DIR/venv/bin/pip"
[ -x "$PIP" ] || PIP="python3 -m pip"
$PIP install --quiet requests
$PIP install --quiet pysnmp || echo "[printora] pysnmp unavailable — falling back to net-snmp CLI (apt/dnf install net-snmp-utils)"

# Config file — 0600 from creation (umask) so the token is never world-readable
umask 077
mkdir -p /etc/printora-agent
cat > /etc/printora-agent/agent_config.json <<EOF
{
  "token": "$TOKEN",
  "cloud_url": "$URL"$([[ -n "$NETWORK" ]] && printf ',\n  "network": "%s"' "$NETWORK")
}
EOF
chmod 600 /etc/printora-agent/agent_config.json

# Dedicated unprivileged user — the agent needs no root (SNMP + LAN sockets only)
if ! id -u printora-agent >/dev/null 2>&1; then
  useradd --system --no-create-home --shell /usr/sbin/nologin printora-agent 2>/dev/null || \
  useradd --system --no-create-home --shell /sbin/nologin printora-agent
fi
chown -R printora-agent:printora-agent "$INSTALL_DIR" /etc/printora-agent

# systemd unit
cat > /etc/systemd/system/printora-agent.service <<'EOF'
[Unit]
Description=Printora Fleet Agent
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=printora-agent
ExecStart=__VENV__/bin/python3 __DIR__/printora_agent.py
Restart=always
RestartSec=10
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=__DIR__ /etc/printora-agent

[Install]
WantedBy=multi-user.target
EOF
sed -i "s|__VENV__|$INSTALL_DIR/venv|; s|__DIR__|$INSTALL_DIR|" /etc/systemd/system/printora-agent.service

systemctl daemon-reload
systemctl enable --now printora-agent
sleep 3
systemctl --no-pager status printora-agent | head -8
journalctl -u printora-agent -n 10 --no-pager || true
echo "[printora] done. Logs: journalctl -u printora-agent -f"
