#!/bin/bash
# Stop Hook — logs session end, checks daily log, triggers config backup

TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
TODAY=$(date +"%Y-%m-%d")
DAILY_LOG="${ARIA_BRAIN:-${HOME}/brain}/06-Daily/${TODAY}.md"

echo "[$TIMESTAMP] Session ended." >> /home/aria/.claude/hooks/hook.log

# Daily Log Check
if [ ! -f "$DAILY_LOG" ]; then
    echo "[$TIMESTAMP] WARNING: No daily log for $TODAY — create ${ARIA_BRAIN:-${HOME}/brain}/06-Daily/${TODAY}.md" >> /home/aria/.claude/hooks/hook.log
    echo "WARNUNG: Kein Daily Log für heute ($TODAY). Bitte ${ARIA_BRAIN:-${HOME}/brain}/06-Daily/${TODAY}.md erstellen."
fi

# Log session task file
SESSION_ID=$(cat /home/aria/.claude/current_session_id 2>/dev/null || echo "unknown")
echo "[$TIMESTAMP] Session task file was: ACTIVE_TASK_${SESSION_ID}.md" >> /home/aria/.claude/hooks/hook.log

# Append session-end block to HANDOFF.md (Append-Log seit 03.05.2026)
# Schutz gegen Datenverlust durch versehentlichen Stop-Trigger.
HANDOFF="${ARIA_BRAIN:-${HOME}/brain}/HANDOFF.md"
ACTIVE_TASK_FILE="/home/aria/.claude/ACTIVE_TASK_${SESSION_ID}.md"
CEST_TIME=$(TZ='Europe/Berlin' date '+%Y-%m-%d %H:%M CEST')

# Initialize HANDOFF.md if missing or empty
if [ ! -s "$HANDOFF" ]; then
    cat > "$HANDOFF" << HANDOFFINIT
---
title: Aria Handoff Log
type: system
tags: [system, handoff, log]
date: $TODAY
status: aktiv
description: Append-only Log der Session-Enden. Neueste Session am Ende.
---

# Aria Handoff Log

> Append-Log seit 03.05.2026: Schutz gegen Datenverlust durch versehentlichen Session-Stop.

HANDOFFINIT
fi

# V5 Sprint 6: nur Header anhaengen wenn auch Inhalt da ist.
# Vor V5: leere Session-End-Headers fluten HANDOFF (siehe HANDOFF.archive
# 2026-05-08-pre-v5-sprint1.md mit 293 leeren Headers).
CHAT_OUTPUT=""
if [ -x "${HOME}/aria/scripts/aria-context-restore.py" ]; then
    CHAT_OUTPUT=$(
        set -a
        [ -f "${HOME}/aria/scripts/.env.aria" ] && source "${HOME}/aria/scripts/.env.aria"
        [ -f "${HOME}/aria/.env" ] && source "${HOME}/aria/.env"
        : "${ARIA_SUPABASE_URL:=$SUPABASE_URL}"
        : "${ARIA_SUPABASE_SERVICE_KEY:=$SUPABASE_SERVICE_ROLE_KEY}"
        export ARIA_SUPABASE_URL ARIA_SUPABASE_SERVICE_KEY
        set +a
        python3 "${HOME}/aria/scripts/aria-context-restore.py" 1 2>/dev/null | tail -20
    )
fi

HAS_TASK=0
if [ -f "$ACTIVE_TASK_FILE" ] && [ -s "$ACTIVE_TASK_FILE" ]; then
    TASK_NONWS=$(tr -d '[:space:]' < "$ACTIVE_TASK_FILE")
    [ -n "$TASK_NONWS" ] && HAS_TASK=1
fi

HAS_CHAT=0
CHAT_NONWS=$(printf '%s' "$CHAT_OUTPUT" | tr -d '[:space:]')
[ -n "$CHAT_NONWS" ] && HAS_CHAT=1

# Nur Header anhaengen wenn mindestens eine Quelle Inhalt hat
if [ "$HAS_TASK" = "1" ] || [ "$HAS_CHAT" = "1" ]; then
    # KAR-764: Idempotenz — pro Session genau EIN Block. Wenn der letzte
    # Block dieselbe Session-ID hat, alten Block entfernen statt anhaengen
    # (verhindert Append-Storm bei mehrfachem Stop-Trigger innerhalb einer Session).
    LAST_HDR_LINE=$(grep -n "^## Session-End" "$HANDOFF" | tail -1 | cut -d: -f1)
    if [ -n "$LAST_HDR_LINE" ]; then
        LAST_SID=$(tail -n +"$LAST_HDR_LINE" "$HANDOFF" | grep -m1 "^Session-ID:")
        if [ "$LAST_SID" = "Session-ID: \`$SESSION_ID\`" ]; then
            SEP_LINE=$(awk -v h="$LAST_HDR_LINE" 'NR<h && $0=="---"{l=NR} END{print l}' "$HANDOFF")
            if [ -n "$SEP_LINE" ] && [ "$SEP_LINE" -gt 1 ]; then
                head -n "$((SEP_LINE-1))" "$HANDOFF" > "${HANDOFF}.dedup" && mv "${HANDOFF}.dedup" "$HANDOFF"
                echo "[$TIMESTAMP] HANDOFF.md same-session block replaced (KAR-764 idempotency)" >> /home/aria/.claude/hooks/hook.log
            fi
        fi
    fi
    {
        echo ""
        echo "---"
        echo ""
        echo "## Session-End $CEST_TIME"
        echo ""
        echo "Session-ID: \`$SESSION_ID\`"
        echo ""
        if [ "$HAS_TASK" = "1" ]; then
            echo "### Letzter Active Task"
            cat "$ACTIVE_TASK_FILE"
            echo ""
        fi
        if [ "$HAS_CHAT" = "1" ]; then
            echo "### Letzter Chat (Kurzabriss)"
            echo "$CHAT_OUTPUT"
            echo ""
        fi
    } >> "$HANDOFF" 2>/dev/null
    echo "[$TIMESTAMP] HANDOFF.md appended (Active-Task=$HAS_TASK, Chat=$HAS_CHAT)" >> /home/aria/.claude/hooks/hook.log
else
    echo "[$TIMESTAMP] HANDOFF.md skipped (no Active-Task and no Chat content)" >> /home/aria/.claude/hooks/hook.log
fi

# HANDOFF-Rotation (Setup-Audit 2026-05-28): append-only Log wuchs auf 1,1 MB.
# Wenn >200KB: Voll-Historie ins Archiv, Live-Datei auf letzte 30 Bloecke kuerzen.
HANDOFF_SIZE=$(wc -c < "$HANDOFF" 2>/dev/null || echo 0)
if [ "$HANDOFF_SIZE" -gt 48000 ]; then  # 200KB->48KB (KAR-73, Audit 08.07.2026: 12KB-Bootstrap-Slot)
    ARCHIVE_DIR="${ARIA_BRAIN:-${HOME}/brain}/HANDOFF.archive"
    mkdir -p "$ARCHIVE_DIR"
    ARCHIVE_FILE="${ARCHIVE_DIR}/HANDOFF-${TODAY}-rotated.md"
    cp "$HANDOFF" "$ARCHIVE_FILE"
    STARTLINE=$(grep -n "^## Session-End" "$HANDOFF" | tail -n 12 | head -1 | cut -d: -f1)
    if [ -n "$STARTLINE" ]; then
        {
            sed -n '1,/^$/p' "$HANDOFF" | head -20   # Frontmatter + Header (bis erste Leerzeile-Gruppe)
            tail -n +"$STARTLINE" "$HANDOFF"
        } > "${HANDOFF}.rot" 2>/dev/null && mv "${HANDOFF}.rot" "$HANDOFF"
        echo "[$TIMESTAMP] HANDOFF.md rotated: ${HANDOFF_SIZE}B archived to $ARCHIVE_FILE, kept last 12 blocks" >> /home/aria/.claude/hooks/hook.log
    fi
fi

# Release busy lock so next trigger can fire
rm -f /home/aria/.claude/aria_busy.lock

# Aria Config Backup (non-blocking, background)
if [ -f /home/aria/aria-v3/scripts/aria-sync.sh ]; then
    bash /home/aria/aria-v3/scripts/aria-sync.sh "chore(backup): session-end sync $TIMESTAMP" >> /home/aria/.claude/hooks/hook.log 2>&1 &
    echo "[$TIMESTAMP] aria-sync triggered (background)" >> /home/aria/.claude/hooks/hook.log
fi
