#!/bin/bash
#########################################################
# chromon.sh – Chromium-Watchdog
#
# Wird von 304.sh getriggert (Chromium läuft bereits).
#
# 1. Crash-Dumps: chrome_debug.log + .dmp zippen und
#    hochladen, Dumps bereinigen
#
# 2. Prozess-Check via pgrep:
#    - Kein Chromium-Prozess → Neustart
#    Identisch mit bin_raspy; pgrep vermeidet Startup-Timing-Probleme
#    (xdotool findet Fenster erst nach vollständigem Laden – zu spät bei schnellem Poll)
#########################################################

BIN=/home/snowtv/bin
LOG=/var/log/stv.log
CRASH_DIR="$HOME/.config/chromium/Crash Reports/pending"
DEBUG_LOG="$HOME/.config/chromium/chrome_debug.log"

ID="$($BIN/getid.sh)"
TOK="$(cat $BIN/token)"

_log() { echo "$(date '+%Y-%m-%d %H:%M:%S') chromon: $*" | tee -a "$LOG"; }

_restart() {
    _log "Neustart Chromium ($1)"
    killall chromium 2>/dev/null
    sleep 1
    exec "$BIN/chrom.sh"
}

# ── 1. Crash-Dumps sammeln ────────────────────────────────

if ls "$CRASH_DIR"/*.dmp &>/dev/null; then
    _log "Crash-Dump(s) gefunden – sammle Logs"
    ZIP="/tmp/crash-${ID}.zip"
    rm -f "$ZIP"
    # chrome_debug.log (lesbar) + .dmp-Files (für spätere Analyse)
    zip -j "$ZIP" "$DEBUG_LOG" "$CRASH_DIR"/*.dmp 2>/dev/null
    rm -f "$CRASH_DIR"/*.dmp "$CRASH_DIR"/*.meta

    DOMAIN="$($BIN/getdomain.sh | tr -d "[']")"
    if ping -c1 -W3 infosnow.ch &>/dev/null; then
        B64=$(base64 -w 0 "$ZIP")
        curl -k --connect-timeout 10 --max-time 60 \
            --data "{\"binary\":\"$B64\"}" \
            -H "APG-Authorization: $TOK" \
            "${DOMAIN}/apg-mp?device=${ID}" \
            --user-agent "apg-mp"
        _log "Crash-ZIP hochgeladen"
        rm -f "$ZIP"
    else
        _log "infosnow.ch nicht erreichbar – Crash-ZIP bleibt in /tmp"
    fi
    # Renderer hat crasht → Tab zeigt Aw Snap → F5 zum Reload
    _log "Renderer-Crash: sende Tab-Reload (F5)"
    DISPLAY=:0.0 xdotool search --onlyvisible --class "[Cc]hromium" \
        key F5 2>/dev/null
    sleep 5
    # Neuer Crash-Dump nach F5 → Reload hat nicht geholfen → Neustart
    if ls "$CRASH_DIR"/*.dmp &>/dev/null; then
        _restart "Renderer-Crash nach F5-Reload nicht behoben"
    fi
fi

# ── 2. Prozess-Check ─────────────────────────────────────────────────

SYSLOAD=$(awk '{print $1}' /proc/loadavg)

if ! pgrep -x chromium &>/dev/null; then
    _restart "kein Chromium-Prozess gefunden"
fi

# Alles OK
_log "OK (Load: $SYSLOAD)"

exit 0
