#!/usr/bin/env bash
# Установка hard-monitor (агент GHard Monitor) в одну команду:
#
#   curl -fsSL https://git.gnexus.space/root/hard-panel/raw/branch/master/monitor/install.sh | bash -s -- PANEL_URL SERVER_KEY
#
# или склонируй репо и запусти из monitor/:
#   ./install.sh https://panel.example.com ghm_xxx [INTERVAL]
#
# Кладёт агент в /opt/hard-monitor, создаёт venv, пишет .env (600),
# ставит systemd-юнит и запускает. Повторный запуск — обновление.

set -euo pipefail

PANEL_URL="${1:-}"
SERVER_KEY="${2:-}"
INTERVAL="${3:-30}"
INSTALL_DIR=/opt/hard-monitor
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

say() { printf '\e[1;32m==>\e[0m %s\n' "$*"; }
die() { printf '\e[1;31mошибка:\e[0m %s\n' "$*" >&2; exit 1; }

if [[ $EUID -ne 0 ]]; then
    die "запусти от root: sudo ./install.sh ..."
fi

if [[ -z "$PANEL_URL" || -z "$SERVER_KEY" ]]; then
    [[ -t 0 ]] || die "нужны аргументы: install.sh PANEL_URL SERVER_KEY [INTERVAL]"
    read -rp "PANEL_URL: " PANEL_URL
    read -rp "SERVER_KEY: " SERVER_KEY
    read -rp "INTERVAL [30]: " INTERVAL
    INTERVAL="${INTERVAL:-30}"
fi
[[ "$PANEL_URL" =~ ^https?:// ]] || die "PANEL_URL должен начинаться с http(s)://"
[[ "$SERVER_KEY" =~ ^ghm_ ]] || die "SERVER_KEY должен начинаться с ghm_ (сгенерирован панелью)"

command -v python3 >/dev/null || die "python3 не найден"

say "устанавливаю в $INSTALL_DIR"
mkdir -p "$INSTALL_DIR"
install -m 755 "$SCRIPT_DIR/hard_monitor.py" "$INSTALL_DIR/hard_monitor.py"

say "создаю venv и ставлю зависимости (psutil, requests)"
if [[ ! -d "$INSTALL_DIR/venv" ]]; then
    python3 -m venv "$INSTALL_DIR/venv" || die "не создался venv (нужен пакет python3-venv)"
fi
"$INSTALL_DIR/venv/bin/pip" install --quiet --upgrade -r <(printf 'psutil>=5.9\nrequests>=2.31\n') \
    || die "не установились зависимости"

say "пишу конфиг"
umask 177
cat > "$INSTALL_DIR/.env" <<EOF
PANEL_URL=$PANEL_URL
SERVER_KEY=$SERVER_KEY
INTERVAL=$INTERVAL
EOF
umask 022

if command -v systemctl >/dev/null; then
    say "ставлю systemd-юнит"
    install -m 644 "$SCRIPT_DIR/hard-monitor.service" /etc/systemd/system/hard-monitor.service
    systemctl daemon-reload
    systemctl enable --now hard-monitor
    sleep 2
    systemctl --no-pager --lines=5 status hard-monitor || true
    say "готово: journalctl -u hard-monitor -f"
else
    say "systemd не найден — юнит не ставил. Запускай вручную:"
    echo "  cd $INSTALL_DIR && ./venv/bin/python hard_monitor.py"
fi