#!/bin/bash
# Aria Compaction-Watch (V5 Sprint 6)
# Lightweight Trigger: misst tmux-Pane-Inhalt, sendet Telegram-Ping bei >Threshold.
# Aria selbst schreibt dann HANDOFF-Summary, nicht das Skript.
#
# Pattern (nicht volle Auto-Compaction wegen Tmux-Mechanik-Komplexitaet):
#   1. Watcher misst Tmux-Pane-Char-Count (Approximation für Conversation-Volume)
#   2. Bei >THRESHOLD: Telegram-Ping an Kais' Bot mit Hint zum /compact
#   3. Aria sieht Telegram-Inbound, schreibt selbst HANDOFF-Summary
#   4. Beim natuerlichen Restart wird HANDOFF in SessionStart-Snapshot geladen
#
# Trigger: systemd-Timer aria-compaction-watch.timer (alle 60 Min)

SESSION="aria"
THRESHOLD_CHARS=${ARIA_COMPACTION_THRESHOLD:-100000}
LOG="/var/log/aria-compaction-watch.log"
COOLDOWN_FILE="/tmp/aria-compaction-cooldown"
COOLDOWN_HOURS=4

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $*" >> "$LOG"
}

# Cooldown-Check: nicht oefters als alle 4h triggern
if [ -f "$COOLDOWN_FILE" ]; then
    LAST_TRIGGER=$(stat -c %Y "$COOLDOWN_FILE" 2>/dev/null || echo 0)
    NOW=$(date +%s)
    DIFF_HOURS=$(( (NOW - LAST_TRIGGER) / 3600 ))
    if [ "$DIFF_HOURS" -lt "$COOLDOWN_HOURS" ]; then
        log "Cooldown active (${DIFF_HOURS}h < ${COOLDOWN_HOURS}h), skip"
        exit 0
    fi
fi

# Tmux-Session check
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
    log "Tmux session '$SESSION' not running, skip"
    exit 0
fi

# Capture pane content size
PANE_CONTENT=$(tmux capture-pane -t "$SESSION" -p -S - -E - 2>/dev/null || echo "")
PANE_BYTES=${#PANE_CONTENT}

log "Pane size: $PANE_BYTES bytes (threshold: $THRESHOLD_CHARS)"

if [ "$PANE_BYTES" -lt "$THRESHOLD_CHARS" ]; then
    exit 0
fi

# Above threshold: send Telegram ping
TG_TOKEN=""
TG_CHAT=""
[ -f /root/aria/.env ] && TG_TOKEN=$(grep -oP '^TELEGRAM_BOT_TOKEN=\K.*' /root/aria/.env 2>/dev/null)
[ -z "$TG_TOKEN" ] && TG_TOKEN=$(grep -oP '^TELEGRAM_BOT_TOKEN=\K.*' /root/.claude/channels/telegram/.env 2>/dev/null)
[ -f /root/aria/.env ] && TG_CHAT=$(grep -oP '^TELEGRAM_CHAT_ID=\K.*' /root/aria/.env 2>/dev/null)
[ -z "$TG_CHAT" ] && TG_CHAT=$(grep -oP '^TELEGRAM_CHAT_ID=\K.*' /root/.claude/channels/telegram/.env 2>/dev/null)

if [ -z "$TG_TOKEN" ] || [ -z "$TG_CHAT" ]; then
    log "No Telegram-Token/ChatID, can't send ping"
    exit 1
fi

# Pane-Inhalt direkt an Aria's tmux-Session senden (Aria selbst, kein Telegram-Detour)
# Aria sieht den Hint, schreibt HANDOFF-Summary.
COMPACT_HINT="[V5-COMPACTION-WATCH] Tmux-Pane-Inhalt bei ${PANE_BYTES} Bytes (Threshold ${THRESHOLD_CHARS}). Bitte HANDOFF.md mit aktuellem Session-Stand updaten + erwarte Restart bei naechstem natuerlichen Trigger."

# Sende als tmux-Eingabe an Aria-Session (sie reagiert wie auf Inbound)
tmux send-keys -t "$SESSION" "$COMPACT_HINT" Enter 2>/dev/null && \
    log "Compaction hint sent to tmux session" || \
    log "Failed to send tmux input"

# Cooldown setzen
touch "$COOLDOWN_FILE"

# Optional: zusätzlich Telegram-Notification an Kais (nur Info, kein Auto-Action)
curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
    --data-urlencode "chat_id=${TG_CHAT}" \
    --data-urlencode "text=⚠️ Aria Compaction-Watch: Pane-Inhalt ${PANE_BYTES}B. Aria wurde gepingt zur HANDOFF-Summary." \
    > /dev/null 2>&1

log "Done. Aria pinged for compaction."
