#!/bin/bash

# NEXX Agent Auto-Update Script
# Проверяет обновления каждый час и обновляет агент при изменении MD5

NEXIOS_URL="https://nexios.ru"
INSTALL_DIR="/opt/nexx-agent"
AGENT_PATH="$INSTALL_DIR/nexx-agent"
TEMP_AGENT="/tmp/nexx-agent.new"
LOG_FILE="/var/log/nexx-agent-update.log"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Проверка что скрипт запущен от root
if [ "$EUID" -ne 0 ]; then 
    log "ERROR: Запустите скрипт от root"
    exit 1
fi

log "Проверка обновлений агента..."

# Получаем текущий MD5 установленного агента
if [ -f "$AGENT_PATH" ]; then
    CURRENT_MD5=$(md5sum "$AGENT_PATH" | awk '{print $1}')
    log "Текущий MD5: $CURRENT_MD5"
else
    log "ERROR: Агент не найден в $AGENT_PATH"
    exit 1
fi

# Скачиваем новый MD5 с сервера
REMOTE_MD5=$(curl -sf "$NEXIOS_URL/nexx/nexx-agent.md5" || echo "")

if [ -z "$REMOTE_MD5" ]; then
    log "WARNING: Не удалось получить MD5 с сервера"
    exit 0
fi

# Убираем лишние символы из MD5
REMOTE_MD5=$(echo "$REMOTE_MD5" | awk '{print $1}')
log "Удалённый MD5: $REMOTE_MD5"

# Сравниваем MD5
if [ "$CURRENT_MD5" = "$REMOTE_MD5" ]; then
    log "Агент актуален, обновление не требуется"
    exit 0
fi

log "Обнаружена новая версия агента, начинаем обновление..."

# Скачиваем новый бинарник
if ! curl -sf -o "$TEMP_AGENT" "$NEXIOS_URL/nexx/nexx-agent"; then
    log "ERROR: Не удалось скачать новый агент"
    exit 1
fi

# Проверяем MD5 скачанного файла
NEW_MD5=$(md5sum "$TEMP_AGENT" | awk '{print $1}')
if [ "$NEW_MD5" != "$REMOTE_MD5" ]; then
    log "ERROR: MD5 не совпадает (ожидался: $REMOTE_MD5, получен: $NEW_MD5)"
    rm -f "$TEMP_AGENT"
    exit 1
fi

log "MD5 проверен успешно"

# Останавливаем службу
log "Останавливаем nexx-agent..."
systemctl stop nexx-agent

# Делаем бэкап текущей версии
cp "$AGENT_PATH" "$AGENT_PATH.backup.$(date +%Y%m%d_%H%M%S)"

# Заменяем бинарник
mv "$TEMP_AGENT" "$AGENT_PATH"
chmod +x "$AGENT_PATH"

# Запускаем службу
log "Запускаем nexx-agent..."
systemctl start nexx-agent

# Проверяем что служба запустилась
sleep 3
if systemctl is-active --quiet nexx-agent; then
    log "SUCCESS: Агент успешно обновлён и запущен (новый MD5: $NEW_MD5)"
    # Удаляем старые бэкапы (оставляем только последние 3)
    ls -t "$AGENT_PATH.backup."* 2>/dev/null | tail -n +4 | xargs rm -f 2>/dev/null
else
    log "ERROR: Агент не запустился после обновления"
    log "Восстанавливаем предыдущую версию..."
    LATEST_BACKUP=$(ls -t "$AGENT_PATH.backup."* 2>/dev/null | head -n 1)
    if [ -n "$LATEST_BACKUP" ]; then
        cp "$LATEST_BACKUP" "$AGENT_PATH"
        systemctl start nexx-agent
        log "Предыдущая версия восстановлена"
    fi
    exit 1
fi

log "Обновление завершено успешно"