#!/usr/bin/env bash
# scripts/test-watchdog — end-to-end: install → block → wait → assert expiry.
# Usage: ./scripts/test-watchdog [duration]
#   duration: how long the block lasts (default: 2m)
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
DURATION="${1:-2m}"

echo "========================================"
echo " lockin watchdog end-to-end test"
echo " duration: $DURATION"
echo "========================================"
echo ""

echo ">>> Step 1: dev-install"
"$REPO_ROOT/scripts/dev-install"
echo ""

echo ">>> Step 2: starting block ($DURATION)"
H=$(echo "$DURATION" | sed -n 's/.*\([0-9]\+\)h.*/\1/p')
M=$(echo "$DURATION" | sed -n 's/.*\([0-9]\+\)m.*/\1/p')
# Watchdog polls about once a minute; wait duration plus 75s.
DELAY_SEC=$(( ${H:-0} * 3600 + ${M:-0} * 60 + 75 ))

lockin start --rule social --for "$DURATION"
echo ""

echo ">>> Step 3: waiting ${DELAY_SEC}s for block to expire + watchdog to fire..."
sleep "$DELAY_SEC"
echo ""

echo ">>> Step 4: assertions"
STATUS=$(lockin status)
echo "--- lockin status ---"
echo "$STATUS"
if echo "$STATUS" | grep -q "No active block"; then
  echo "OK: status reports no active block"
else
  echo "FAIL: expected no active block after expiry"
  exit 1
fi

if grep -q "=== lockin start ===" /etc/hosts 2>/dev/null; then
  echo "FAIL: lockin markers still in /etc/hosts"
  exit 1
fi
echo "OK: no lockin markers in /etc/hosts"

if [[ -f ~/.config/lockin/state.json ]]; then
  echo "FAIL: state.json still present"
  cat ~/.config/lockin/state.json
  exit 1
fi
echo "OK: state.json removed"

echo ""
echo "========================================"
echo " test complete"
echo "========================================"
