#!/bin/bash
# 同步本地爬虫脚本 → 服务器
# 本地为主（大本营），写好代码后执行此脚本推送到服务器
# 用法: ./sync_to_server.sh          # dry-run 预览
#        ./sync_to_server.sh --run   # 实际同步

SERVER="root@1.94.217.116"
# 2026-09-10 改用 SSH 密钥认证, 明文已移除
LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)"
REMOTE_DIR="/root/gov_crawler"

echo "=============================="
echo " 本地 → 服务器 脚本同步工具"
echo "=============================="
echo "本地:  $LOCAL_DIR"
echo "服务器: $SERVER:$REMOTE_DIR"
echo ""

# 要同步的文件模式：爬虫脚本 + 配置 + 控制脚本
SYNC_PATTERNS=("crawl_*.py" "crawler_lib.py" "daily_crawl_config.json" "daily_incremental.sh" "sync_to_server.sh")

# 收集匹配的文件
FILES=()
for pattern in "${SYNC_PATTERNS[@]}"; do
  for f in "$LOCAL_DIR"/$pattern; do
    [ -f "$f" ] && FILES+=("$(basename "$f")")
  done
done

echo "要同步的文件数: ${#FILES[@]}"
echo ""

if [ "$1" == "--run" ]; then
  echo "▶ 同步爬虫脚本 → $REMOTE_DIR/ ..."
  for f in "${FILES[@]}"; do
    # 跳过 daily_incremental.sh (它要放 /root/)
    [ "$f" == "daily_incremental.sh" ] && continue
    [ "$f" == "sync_to_server.sh" ] && continue
    scp "$LOCAL_DIR/$f" "$SERVER:$REMOTE_DIR/$f" > /dev/null 2>&1 && echo "  ✅ $f" || echo "  ❌ $f"
  done

  echo ""
  echo "▶ 同步控制脚本 → /root/ ..."
  scp "$LOCAL_DIR/daily_incremental.sh" "$SERVER:/root/daily_incremental.sh" > /dev/null 2>&1 && echo "  ✅ daily_incremental.sh" || echo "  ❌ daily_incremental.sh"

  echo ""
  echo "📊 验证服务器状态:"
  ssh root@1.94.217.116 "
    echo \"  爬虫脚本: \$(ls $REMOTE_DIR/crawl_*.py | wc -l) 个\"
    echo \"  配置启用: \$(python3 -c 'import json;c=json.load(open(\"$REMOTE_DIR/daily_crawl_config.json\"));print(sum(1 for x in c[\"crawlers\"] if x.get(\"enabled\")))' ) 个\"
    crontab -l | grep daily_incremental
  "
  echo ""
  echo "✅ 同步完成！明天 7:00 自动执行日跑"
else
  echo "▶ Dry-run 预览:"
  for f in "${FILES[@]}"; do
    local_size=$(stat -f%z "$LOCAL_DIR/$f" 2>/dev/null || stat -c%s "$LOCAL_DIR/$f" 2>/dev/null)
    remote_size=$(ssh root@1.94.217.116 "stat -c%s $REMOTE_DIR/$f 2>/dev/null || echo '?'")
    if [ "$local_size" != "$remote_size" ]; then
      echo "  📤 $f (本地${local_size}→远程${remote_size})"
    else
      echo "  ✅ $f (一致)"
    fi
  done
  echo ""
  echo "执行 ./sync_to_server.sh --run 来实际推送"
fi
