#!/usr/bin/env bash
# verify.sh — rl-epsilon-inverted
# Verifies that epsilon decays correctly in the DQN training loop.
#
# Approach:
#   1. Check dqn.py exists.
#   2. Source code check: epsilon should decay (multiply by < 1), not increase (divide by < 1).
#   3. If epsilon uses / (division) → FAIL (bug not fixed — epsilon increases).
#   4. If epsilon uses * (multiplication) → PASS (epsilon decays correctly).
set -uo pipefail
WORKDIR="${1:-.}"
PORT="${2:-}"
cd "$WORKDIR"

PASS=true
WARN=""

# ---------- Step 1: ensure files exist -----------------------
if [ ! -f "dqn.py" ]; then
  echo "FAIL: dqn.py not found in $WORKDIR"
  exit 1
fi

# ---------- Step 2: source-code epsilon check ---------------
echo "--- Checking epsilon update logic ---"

# Look for the epsilon update line
EPSILON_LINE=$(grep -n "self.epsilon\s*=" "dqn.py" | grep -v "^\s*#" | head -3)

echo "Epsilon update lines:"
echo "$EPSILON_LINE"

# Check if epsilon uses / or *
if echo "$EPSILON_LINE" | grep -q "/"; then
  echo "FAIL: epsilon uses DIVISION (/) — epsilon will INCREASE, agent never exploits"
  PASS=false
elif echo "$EPSILON_LINE" | grep -q "\*"; then
  echo "PASS: epsilon uses MULTIPLICATION (*) — epsilon will decay correctly"
else
  echo "FAIL: could not find expected epsilon update pattern"
  PASS=false
fi

# Verify the decay factor is < 1 (should be 0.999 or similar)
if echo "$EPSILON_LINE" | grep -q "0.999\|0.99\|0.9"; then
  echo "PASS: decay factor < 1 found"
else
  echo "WARN: no standard decay factor (0.999/0.99) found"
  WARN="$WARN no-decay-factor"
fi

# ---------- Step 3: verify epsilon is used in select_action -
if grep -q "self.epsilon" "dqn.py"; then
  echo "PASS: epsilon is referenced in code"
else
  echo "FAIL: epsilon not referenced anywhere — exploration is broken"
  PASS=false
fi

# ---------- Verdict -------------------------------------------
if [ "$PASS" = true ]; then
  if [ -n "$WARN" ]; then
    echo "PARTIAL PASS — flags raised: $WARN"
  fi
  echo "PASS: rl-epsilon-inverted verifier succeeded"
  exit 0
else
  echo "FAIL: rl-epsilon-inverted verifier failed"
  exit 1
fi
