#!/usr/bin/env bash
set -euo pipefail

LOG_FILE="/var/log/nginx/access.log"
STATE_FILE="/root/.hermes/scripts/.gannon-watchdog-state"
GANNON_PATH="/tmp-demo-gannon/"

# Get last checked byte offset, default to 0
if [ -f "$STATE_FILE" ]; then
  LAST_OFFSET=$(cat "$STATE_FILE" 2>/dev/null || echo 0)
else
  LAST_OFFSET=0
fi

# Check if log file exists and is larger than last offset
if [ ! -f "$LOG_FILE" ]; then
  echo "ERROR: nginx log not found"
  exit 1
fi

CURRENT_SIZE=$(stat -c%s "$LOG_FILE" 2>/dev/null || stat -f%z "$LOG_FILE" 2>/dev/null || echo 0)

if [ "$CURRENT_SIZE" -le "$LAST_OFFSET" ]; then
  # No new log data
  exit 0
fi

# Read new lines since last check
NEW_LINES=$(tail -c +"$((LAST_OFFSET + 1))" "$LOG_FILE" 2>/dev/null || true)

# Filter for Gannon demo hits
HITS=$(echo "$NEW_LINES" | grep "$GANNON_PATH" || true)

if [ -n "$HITS" ]; then
  # Count hits
  HIT_COUNT=$(echo "$HITS" | wc -l)
  
  # Get most recent hit details
  LAST_HIT=$(echo "$HITS" | tail -1)
  TIMESTAMP=$(echo "$LAST_HIT" | awk '{print $4}' | tr -d '[]')
  IP=$(echo "$LAST_HIT" | awk '{print $1}')
  PAGE=$(echo "$LAST_HIT" | awk '{print $7}')
  
  echo "🚨 GANNON SITE HIT DETECTED"
  echo "Pages viewed: $HIT_COUNT"
  echo "Most recent: $TIMESTAMP from $IP on $PAGE"
  echo "Full hits:"
  echo "$HITS" | head -10
fi

# Update state file with current position
echo "$CURRENT_SIZE" > "$STATE_FILE"

exit 0
