#!/usr/bin/env bash
# Weekly Retro Runner — 用 Claude Code CLI 跑 weekly-retro skill orchestrator
#
# 优势（vs 直接调 API）：
#   - 不用单独维护 prompt template、API client、决策树代码
#   - skills 自动加载（.agents/skills/weekly-retro/SKILL.md）
#   - 同一份 skill 同时支持 cron / workflow_dispatch / 用户 @weekly-retro
#
# 用法（默认从 Gitea Action 触发）：
#   bash scripts/ops/weekly-retro-runner.sh
#
# 必填环境变量：
#   WEEKLY_RETRO_TOKEN   Gitea token（issues:write + repository:write 权限）
#                        若未设，回退到 GITEA_API_TOKEN / GITEA_TOKEN
#
# 可选环境变量：
#   WEEKLY_RETRO_DRY_RUN 非空时不真写 Gitea，只让 claude 打印计划。观察期可用。
#   GITEA_BASE_URL       默认 http://43.130.59.228
#   GITEA_OWNER          默认 FFAIWorkspace
#   GITEA_REPO           默认 workspace
#
# 退出码：
#   0  成功（含 NOOP / WARNING 这种"没改东西"的正常分支）
#   1  脚本错误 / claude 调用失败
#
# 触发场景：
#   1. .gitea/workflows/weekly-retro.yml 周六 cron / workflow_dispatch
#   2. 本地手动调试: bash scripts/ops/weekly-retro-runner.sh
#
# 不应在以下场景调用（用其他入口）：
#   - 用户在 Claude 会话里要复盘 → 直接说 @weekly-retro，skill 走 interactive mode
#   - 想看历史报告 → 直接读 testing/reports/retros/

set -euo pipefail

# ---------- 配置 ----------

GITEA_HOST="${GITEA_BASE_URL:-http://43.130.59.228}"
GITEA_OWNER="${GITEA_OWNER:-FFAIWorkspace}"
GITEA_REPO="${GITEA_REPO:-workspace}"

# token 兜底链
TOKEN="${WEEKLY_RETRO_TOKEN:-${GITEA_API_TOKEN:-${GITEA_TOKEN:-}}}"
if [[ -z "${TOKEN}" ]]; then
  echo "ERROR: WEEKLY_RETRO_TOKEN / GITEA_API_TOKEN / GITEA_TOKEN 至少配一个" >&2
  exit 1
fi

# 让 claude 子进程能拿到 token
export GITEA_API_TOKEN="${TOKEN}"
export WEEKLY_RETRO_TOKEN="${TOKEN}"

DRY_RUN_HINT=""
if [[ -n "${WEEKLY_RETRO_DRY_RUN:-}" ]]; then
  DRY_RUN_HINT=" 这是 DRY-RUN: 照常跑数据脚本、做决策、生成候选改进，但**不要**真的 POST/PATCH/COMMENT 到 Gitea，只输出'我会怎么做'。"
fi

# ---------- 验证依赖 ----------

if ! command -v claude >/dev/null 2>&1; then
  echo "ERROR: claude CLI 不在 PATH。runner 镜像要预装 claude 且已登录。" >&2
  echo "       参考 ai-review-runner.sh 同款配置。" >&2
  exit 1
fi

if ! command -v python3 >/dev/null 2>&1; then
  echo "ERROR: python3 不在 PATH。weekly-review.py 需要 python 3.10+。" >&2
  exit 1
fi

# ---------- 触发 ----------

ISO_WEEK=$(date +%G-W%V)
echo "[runner] ISO 周: ${ISO_WEEK}"
echo "[runner] 仓库: ${GITEA_OWNER}/${GITEA_REPO}"
echo "[runner] dry-run: ${WEEKLY_RETRO_DRY_RUN:+yes}${WEEKLY_RETRO_DRY_RUN:-no}"
echo "[runner] 调用 claude（runner mode）..."

PROMPT="运行 weekly-retro skill (RUNNER mode): 按 .agents/skills/weekly-retro/SKILL.md 决策树跑周六例行流程。

- 当前 ISO 周: ${ISO_WEEK}
- 仓库: ${GITEA_OWNER}/${GITEA_REPO}
- token 已在 \$WEEKLY_RETRO_TOKEN / \$GITEA_API_TOKEN 环境变量

不与用户对话、不等回复、不问问题。按决策树命中分支（CREATE / NOOP / REPAIR / WARNING）执行，最后输出 status 一行（如 'CREATED: issue #N, M candidates'）然后退出。${DRY_RUN_HINT}"

# claude 在自己的 cwd 找 .claude/skills/，所以必须从 repo 根跑
cd "$(git rev-parse --show-toplevel)"

if claude --dangerously-skip-permissions -p "${PROMPT}" 2>&1; then
  echo "[runner] claude 调用成功"
  exit 0
else
  exit_code=$?
  echo "[runner] claude 调用失败 exit=${exit_code}" >&2
  exit "${exit_code}"
fi
