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

PROJECT_DIR="/home/long/project/蚊子"
STATE_DIR="$PROJECT_DIR/logs/e2e-automation"
CLAUDE_BIN="${CLAUDE_BIN:-$HOME/.cursor/extensions/anthropic.claude-code-2.1.15-linux-x64/resources/native-binary/claude}"
CONTRACT_CHECK="$PROJECT_DIR/scripts/validate_test_contracts.sh"
mkdir -p "$STATE_DIR"

TS="$(date '+%Y%m%d_%H%M%S')"
RUN_LOG="$STATE_DIR/run_${TS}.log"
REPORT_FILE="$STATE_DIR/report_${TS}.md"
LATEST_LINK="$STATE_DIR/latest_report.md"

cd "$PROJECT_DIR"

if [ ! -x "$CONTRACT_CHECK" ]; then
  echo "[$(date '+%F %T')] [data-contract] missing executable: $CONTRACT_CHECK" | tee -a "$RUN_LOG"
  exit 2
fi

export SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE:-e2e}"
if ! "$CONTRACT_CHECK" "$PROJECT_DIR" runner >> "$RUN_LOG" 2>&1; then
  echo "[$(date '+%F %T')] [data-contract] preflight failed, aborting run" | tee -a "$RUN_LOG"
  exit 2
fi

echo "[$(date '+%F %T')] runner start" | tee -a "$RUN_LOG"

PROMPT=$(cat <<'EOF'
你现在负责 /home/long/project/蚊子 的端到端测试优化闭环。
要求：
1) 运行并修复端到端测试，直到全部通过（若仓库存在前后端测试，也一并回归）
2) 你可以直接修改代码并执行必要命令
3) 如遇失败，持续迭代修复，不要停在计划阶段
4) 输出最终报告（中文Markdown），必须包含：
   - 是否“全部通过”（是/否）
   - 执行命令清单
   - 修改文件清单
   - 测试结果摘要（通过/失败数量）
   - 若未全部通过，明确阻塞项和下一步
EOF
)

"$CLAUDE_BIN" -p \
  --permission-mode dontAsk \
  --dangerously-skip-permissions \
  "$PROMPT" > "$REPORT_FILE" 2>> "$RUN_LOG"

cp -f "$REPORT_FILE" "$LATEST_LINK"

if grep -Eq '全部通过[：: ]*是|是否“全部通过”[：: ]*是|全部通过\s*\(是\)' "$REPORT_FILE"; then
  touch "$STATE_DIR/done.flag"
  echo "[$(date '+%F %T')] done flag set" | tee -a "$RUN_LOG"
else
  echo "[$(date '+%F %T')] run finished but not fully passed" | tee -a "$RUN_LOG"
fi

echo "[$(date '+%F %T')] runner end" | tee -a "$RUN_LOG"
