#!/usr/bin/env bash
# Consolidate personal memory: review journal, prune stale, report stats
# Usage: scripts/mem-digest [--prune] [--days N]
#
# This is the "sleep" cycle for memory consolidation.
# Only processes personal tier (org memory is git-managed externally).
#
# Options:
#   --prune   Actually archive stale entries (default: dry-run)
#   --days    Stale threshold in days (default: 90)

set -euo pipefail

PERSONAL_DIR="$HOME/.config/amp/memory/personal/axiom-sre"

PRUNE=false
DAYS=90

while [[ $# -gt 0 ]]; do
  case "$1" in
    --prune) PRUNE=true; shift ;;
    --days) DAYS="$2"; shift 2 ;;
    *) shift ;;
  esac
done

# Calculate cutoff date
if date -v-${DAYS}d +%Y-%m-%d >/dev/null 2>&1; then
  CUTOFF=$(date -v-${DAYS}d +%Y-%m-%d)
else
  CUTOFF=$(date -d "$DAYS days ago" +%Y-%m-%d)
fi

echo "=== Memory Digest ==="
echo "Prune: $PRUNE (stale = unused $DAYS+ days, cutoff: $CUTOFF)"
echo ""

if [[ ! -d "$PERSONAL_DIR" ]]; then
  echo "Personal memory not found at $PERSONAL_DIR"
  echo "Run: scripts/setup"
  exit 1
fi

# --- Promote journal entries ---
journal_dir="$PERSONAL_DIR/journal"
if [[ -d "$journal_dir" ]]; then
  has_entries=false
  for journal_file in "$journal_dir"/journal-*.md; do
    [[ -f "$journal_file" ]] || continue
    
    entry_count=$(grep -c "^## M-" "$journal_file" 2>/dev/null || true)
    entry_count=$(echo "$entry_count" | tr -d '[:space:]')
    [[ -z "$entry_count" || ! "$entry_count" =~ ^[0-9]+$ ]] && entry_count=0
    
    if [[ "$entry_count" -gt 0 ]]; then
      has_entries=true
      echo "=== Journal: $(basename "$journal_file") ($entry_count entries) ==="
      echo ""
      grep "^## M-" "$journal_file" | head -10
      echo ""
    fi
  done

  if [[ "$has_entries" == true ]]; then
    echo "→ Review entries above and promote valuable ones to kb/"
    echo ""
  else
    echo "No journal entries to review."
    echo ""
  fi
else
  echo "No journal directory."
  echo ""
fi

# --- Prune stale entries ---
kb_dir="$PERSONAL_DIR/kb"
if [[ -d "$kb_dir" ]]; then
  echo "=== Stale Entries (last_used before $CUTOFF, not pinned) ==="
  echo ""

  stale_found=false
  for kb_file in "$kb_dir"/*.md; do
    [[ -f "$kb_file" ]] || continue
    
    while IFS= read -r line; do
      if [[ "$line" =~ ^##\ M-([0-9]{4}-[0-9]{2}-[0-9]{2}) ]]; then
        entry_date="${BASH_REMATCH[1]}"
        if [[ "$entry_date" < "$CUTOFF" ]]; then
          stale_found=true
          echo "  $(basename "$kb_file"): $line"
        fi
      fi
    done < "$kb_file"
  done

  if [[ "$stale_found" == true ]]; then
    echo ""
    if [[ "$PRUNE" == true ]]; then
      echo "→ Archiving stale entries... (not yet implemented - manual review needed)"
    else
      echo "→ Run with --prune to archive these entries"
    fi
  else
    echo "  No stale entries found."
  fi
  echo ""
fi

# --- Summary stats ---
echo "=== Memory Stats ==="
echo ""
if [[ -d "$kb_dir" ]]; then
  for kb_file in "$kb_dir"/*.md; do
    [[ -f "$kb_file" ]] || continue
    name=$(basename "$kb_file" .md)
    count=$(grep -c "^## M-" "$kb_file" 2>/dev/null || true)
    count=$(echo "$count" | tr -d '[:space:]')
    [[ -z "$count" || ! "$count" =~ ^[0-9]+$ ]] && count=0
    echo "  $name: $count entries"
  done
fi
echo ""

echo "=== Done ==="
echo ""
echo "Next steps:"
echo "  • Promote valuable journal entries to kb/"
echo "  • Run with --prune to archive stale entries"
echo "  • Run 'scripts/mem-share <org> \"message\"' to share with team"
