#!/usr/bin/env bash
# Deploy auto-merge-daemon to a host (.48 or .155).
#
# Usage:
#   AIBOT_MERGE_TOKEN=<token> bash scripts/ops/auto-merge-daemon/deploy.sh <host> <offset_min>
#
# Example:
#   AIBOT_MERGE_TOKEN=abc bash scripts/ops/auto-merge-daemon/deploy.sh 43.166.205.48 0
#   AIBOT_MERGE_TOKEN=abc bash scripts/ops/auto-merge-daemon/deploy.sh 43.166.182.155 2
#
# 幂等：同一 host 重复运行只会更新文件 + reload systemd，不会留 stale 状态。
#
# 文档：docs/ops/03-auto-merge-daemon.md
set -euo pipefail

HOST="${1:-}"
OFFSET="${2:-}"

if [[ -z "$HOST" || -z "$OFFSET" ]]; then
  echo "Usage: $0 <host> <offset_min>" >&2
  echo "Example: $0 43.166.205.48 0" >&2
  exit 2
fi

if [[ -z "${AIBOT_MERGE_TOKEN:-}" ]]; then
  echo "ERROR: AIBOT_MERGE_TOKEN env var not set" >&2
  echo "Generate via AIBot Gitea account → Settings → Applications → Generate Token (scope: write:repository)" >&2
  exit 1
fi

# 校验 offset 是 0-4 之间的整数（5 分钟周期内的 offset）
if ! [[ "$OFFSET" =~ ^[0-4]$ ]]; then
  echo "ERROR: offset must be 0-4 (got '$OFFSET')" >&2
  exit 2
fi

# 仓库根
REPO_ROOT="$(git rev-parse --show-toplevel)"
DEPLOY_DIR="$REPO_ROOT/scripts/ops/auto-merge-daemon"

echo "==> Deploying auto-merge-daemon to $HOST (offset=*:$OFFSET/5)"

# 1. 远端建目录
ssh "ubuntu@$HOST" "
  set -e
  sudo mkdir -p /opt/auto-merge-daemon /etc/auto-merge-daemon /var/log/auto-merge-daemon
  sudo chown ubuntu:ubuntu /var/log/auto-merge-daemon
  sudo chmod 755 /var/log/auto-merge-daemon
"

# 2. 复制 Python 文件（merge 逻辑 + Api helper）
echo "==> scp scripts → /opt/auto-merge-daemon/"
scp "$REPO_ROOT/scripts/ops/auto-merge-develop.py" "$REPO_ROOT/scripts/ops/_gitea_api.py" \
    "ubuntu@$HOST:/tmp/"
ssh "ubuntu@$HOST" "
  set -e
  sudo install -m 644 -o root -g root /tmp/auto-merge-develop.py /opt/auto-merge-daemon/
  sudo install -m 644 -o root -g root /tmp/_gitea_api.py /opt/auto-merge-daemon/
  rm /tmp/auto-merge-develop.py /tmp/_gitea_api.py
"

# 3. systemd unit
echo "==> scp systemd unit + timer"
scp "$DEPLOY_DIR/auto-merge-daemon.service" "ubuntu@$HOST:/tmp/"
sed "s/OFFSET_PLACEHOLDER/$OFFSET/g" "$DEPLOY_DIR/auto-merge-daemon.timer.template" \
    | ssh "ubuntu@$HOST" "cat > /tmp/auto-merge-daemon.timer"
ssh "ubuntu@$HOST" "
  set -e
  sudo install -m 644 -o root -g root /tmp/auto-merge-daemon.service /etc/systemd/system/
  sudo install -m 644 -o root -g root /tmp/auto-merge-daemon.timer /etc/systemd/system/
  rm /tmp/auto-merge-daemon.service /tmp/auto-merge-daemon.timer
"

# 4. env file（含 token，600 权限）
echo "==> write /etc/auto-merge-daemon/env (chmod 600 root:root)"
# 通过 stdin 传 token，避免 process arg 泄漏
printf 'GITEA_API_TOKEN=%s\n' "$AIBOT_MERGE_TOKEN" \
  | ssh "ubuntu@$HOST" "sudo tee /etc/auto-merge-daemon/env > /dev/null && sudo chmod 600 /etc/auto-merge-daemon/env && sudo chown root:root /etc/auto-merge-daemon/env"

# 5. 启用 + 启动 timer
echo "==> systemctl daemon-reload + enable + start timer"
ssh "ubuntu@$HOST" "
  set -e
  sudo systemctl daemon-reload
  sudo systemctl enable --now auto-merge-daemon.timer
"

# 6. 验证 + smoke test（主动跑一次 oneshot service，捕获 ERR-20260519-001 类的"配置完成但首跑爆"）
echo
echo "==> 验证："
ssh "ubuntu@$HOST" "
  echo '--- timer state ---'
  sudo systemctl is-active auto-merge-daemon.timer
  echo '--- next runs ---'
  sudo systemctl list-timers --no-pager auto-merge-daemon.timer
"

echo
echo "==> smoke test：主动跑一次 service 看 first tick 输出（防 ERR-20260519-001 类配置盲点）"
ssh "ubuntu@$HOST" "
  sudo systemctl start auto-merge-daemon.service
  echo '--- service result ---'
  sudo systemctl status auto-merge-daemon.service --no-pager -n 5 2>&1 | head -8
  echo '--- last 15 lines of journal ---'
  sudo journalctl -u auto-merge-daemon -n 15 --no-pager
"

echo
echo "✅ Deploy complete: $HOST (offset=*:$OFFSET/5)"
echo "   监控：ssh ubuntu@$HOST 'sudo journalctl -u auto-merge-daemon -f'"
