#!/bin/bash
# Aktualizacja nivato-logger (suite bookworm).
# Exit: 0 = zainstalowano nowszą wersję, 10 = już aktualne, inne = błąd.
# Po sukcesie: marker reboot + restart usługi + reboot za 10 s (panel pokazuje odliczanie).
set -euo pipefail

export DEBIAN_FRONTEND=noninteractive
export NIVATO_SKIP_REBOOT=1
SOURCES="/etc/apt/sources.list.d/nivato-logger.sources"
PACKAGE="nivato-logger"
DATA_DIR="${NIVATO_DATA_DIR:-/opt/nivato-logger/data}"
REBOOT_MARKER="$DATA_DIR/update-reboot-at"
REBOOT_DELAY_SEC=10

# Uruchom poza usługą Java — dpkg stopuje nivato-logger w trakcie upgrade.
if [ "${NIVATO_APT_UPGRADE_TRANSIENT:-}" != "1" ]; then
    systemctl reset-failed nivato-logger-apt-upgrade.service 2>/dev/null || true
    systemctl stop nivato-logger-apt-upgrade.service 2>/dev/null || true
    exec /usr/bin/systemd-run --wait --collect --unit=nivato-logger-apt-upgrade \
        --setenv=NIVATO_APT_UPGRADE_TRANSIENT=1 \
        --setenv=NIVATO_SKIP_REBOOT=1 \
        --setenv=NIVATO_DATA_DIR="$DATA_DIR" \
        "$0" "$@"
fi

ensure_sources() {
    mkdir -p "$(dirname "$SOURCES")"
    cat > "$SOURCES" <<'EOF'
Types: deb
URIs: https://apt.nivato.app/
Suites: bookworm
Components: main
Architectures: arm64
Trusted: yes
EOF
    chmod 644 "$SOURCES"
    echo "Źródło APT ustawione na suite bookworm ($SOURCES)"
}

pkg_version() {
    dpkg-query -W -f='${Version}' "$PACKAGE" 2>/dev/null || echo ""
}

candidate_version() {
    apt-cache policy "$PACKAGE" 2>/dev/null | awk '/Candidate:/ { print $2; exit }'
}

ensure_sources

BEFORE="$(pkg_version)"
echo "Zainstalowana wersja: ${BEFORE:-brak}"

/usr/bin/apt-get update -o Acquire::Retries=3
CANDIDATE="$(candidate_version)"
echo "Kandydat w repo: ${CANDIDATE:-brak}"

if [ -z "$CANDIDATE" ] || [ "$CANDIDATE" = "(none)" ]; then
    echo "Brak kandydata pakietu $PACKAGE w repozytorium" >&2
    exit 2
fi

if [ -n "$BEFORE" ] && dpkg --compare-versions "$BEFORE" ge "$CANDIDATE"; then
    echo "Pakiet jest już aktualny ($BEFORE)"
    exit 10
fi

/usr/bin/apt-get install --only-upgrade -y "$PACKAGE"

AFTER="$(pkg_version)"
echo "Wersja po aktualizacji: ${AFTER:-brak}"

if [ -z "$AFTER" ]; then
    echo "Pakiet nie jest zainstalowany po apt-get install" >&2
    exit 3
fi

if [ -n "$BEFORE" ] && [ "$BEFORE" = "$AFTER" ]; then
    echo "Wersja nie zmieniła się mimo nowszego kandydata ($CANDIDATE)" >&2
    exit 4
fi

echo "Aktualizacja OK: ${BEFORE:-none} -> $AFTER"

mkdir -p "$DATA_DIR"
reboot_at=$(( $(date +%s) + REBOOT_DELAY_SEC ))
printf '%s\n' "$reboot_at" > "$REBOOT_MARKER"
chmod 644 "$REBOOT_MARKER"
echo "Restart systemu zaplanowany za ${REBOOT_DELAY_SEC}s (marker $REBOOT_MARKER)"

# Anuluj poprzednie zaplanowane restarty z update, potem zaplanuj nowy.
systemctl reset-failed nivato-logger-update-reboot.service 2>/dev/null || true
systemctl stop nivato-logger-update-reboot.service 2>/dev/null || true
systemd-run --unit=nivato-logger-update-reboot --on-active="${REBOOT_DELAY_SEC}s" /sbin/reboot \
    >/dev/null 2>&1 || (sleep "$REBOOT_DELAY_SEC"; /sbin/reboot) >/dev/null 2>&1 &

# Podnieś panel na te ~10 s, żeby UI pokazało odliczanie przed restartem.
systemctl daemon-reload 2>/dev/null || true
systemctl restart nivato-logger.service 2>/dev/null \
    || systemctl start nivato-logger.service 2>/dev/null \
    || true

exit 0
