# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# 🔄 OAuth2 Token 自动续期
#
# 守护: PER-ZY001 铸渊 (Zhuyuan)
# 系统: SYS-GLW-0001
# 主控: TCS-0002∞ (冰朔)
#
# CRON 策略：
#   主刷新 A: 每周一 10:00 CST (02:00 UTC) — 距周六休眠最远
#   主刷新 B: 每周四 10:00 CST (02:00 UTC) — 3天后补刷
#   三层保险：周一 + 周四 + 每日安全网（check-token-health.yml）
#
# 生命线任务：天眼休眠期内豁免执行
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

name: 🔄 OAuth2 Token 自动续期

on:
  schedule:
    # 主刷新 A: 每周一 10:00 CST (02:00 UTC)
    - cron: '0 2 * * 1'
    # 主刷新 B: 每周四 10:00 CST (02:00 UTC)
    - cron: '0 2 * * 4'
  workflow_dispatch:
    inputs:
      force_renew:
        description: '强制刷新所有 Token（忽略过期时间检查）'
        required: false
        type: boolean
        default: false

permissions:
  contents: write
  actions: write

jobs:
  renew-tokens:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: 🔧 安装依赖
        run: npm install tweetsodium

      - name: 🔄 执行 Token 刷新
        env:
          GDRIVE_CLIENT_ID: ${{ secrets.ZY_GDRIVE_CLIENT_ID }}
          GDRIVE_CLIENT_SECRET: ${{ secrets.ZY_GDRIVE_SECRET }}
          GDRIVE_REFRESH_TOKEN: ${{ secrets.ZY_GDRIVE_REFRESH_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          FORCE_RENEW: ${{ inputs.force_renew || 'false' }}
          # 新增开发者 Token（每次加人时追加）
          # GDRIVE_REFRESH_TOKEN_DEV001: ${{ secrets.ZY_GDRIVE_REFRESH_TOKEN }}
          # GDRIVE_REFRESH_TOKEN_DEV002: ${{ secrets.ZY_GDRIVE_REFRESH_TOKEN }}
        run: node scripts/gdrive/renew-tokens.js

      - name: 📋 提交注册表更新
        run: |
          git config user.name "zhuyuan-bot"
          git config user.email "zhuyuan@guanghulab.com"
          git add config/gdrive-tokens.json
          git add -f grid-db/logs/token-alert.json 2>/dev/null || true
          git diff --cached --quiet || git commit -m "auto: Token renewal $(date -u +%Y-%m-%dT%H:%M:%SZ) [skip ci]"
          git push

      - name: ⚠️ 失败告警
        if: failure()
        run: |
          echo "⚠️ Token 刷新失败！检查 grid-db/logs/token-alert.json"
          echo "需要人类手动重新授权。"
