# OpenWebUI 社区统计报告自动生成
# 只在统计数据变化时 commit，避免频繁提交

name: Community Stats

on:
  # 每小时整点运行
  schedule:
    - cron: '0 * * * *'
  # 手动触发
  workflow_dispatch:

permissions:
  contents: write

jobs:
  update-stats:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      
      - name: Install dependencies
        run: |
          pip install requests python-dotenv
      
      - name: Get previous stats
        id: prev_stats
        run: |
          # 获取当前的统计数据用于比较
          if [ -f docs/community-stats.json ]; then
            OLD_DOWNLOADS=$(jq -r '.total_downloads' docs/community-stats.json 2>/dev/null || echo "0")
            OLD_POSTS=$(jq -r '.total_posts' docs/community-stats.json 2>/dev/null || echo "0")
            OLD_UPVOTES=$(jq -r '.total_upvotes' docs/community-stats.json 2>/dev/null || echo "0")
            echo "old_downloads=$OLD_DOWNLOADS" >> $GITHUB_OUTPUT
            echo "old_posts=$OLD_POSTS" >> $GITHUB_OUTPUT
            echo "old_upvotes=$OLD_UPVOTES" >> $GITHUB_OUTPUT
          else
            echo "old_downloads=0" >> $GITHUB_OUTPUT
            echo "old_posts=0" >> $GITHUB_OUTPUT
            echo "old_upvotes=0" >> $GITHUB_OUTPUT
          fi
      
      - name: Generate stats report
        env:
          OPENWEBUI_API_KEY: ${{ secrets.OPENWEBUI_API_KEY }}
          OPENWEBUI_USER_ID: ${{ secrets.OPENWEBUI_USER_ID }}
        run: |
          python scripts/openwebui_stats.py
      
      - name: Check for significant changes
        id: check_changes
        run: |
          # 获取新的统计数据
          NEW_DOWNLOADS=$(jq -r '.total_downloads' docs/community-stats.json 2>/dev/null || echo "0")
          NEW_POSTS=$(jq -r '.total_posts' docs/community-stats.json 2>/dev/null || echo "0")
          NEW_UPVOTES=$(jq -r '.total_upvotes' docs/community-stats.json 2>/dev/null || echo "0")
          
          echo "📊 Previous: ${{ steps.prev_stats.outputs.old_downloads }} downloads, ${{ steps.prev_stats.outputs.old_posts }} posts, ${{ steps.prev_stats.outputs.old_upvotes }} upvotes"
          echo "📊 Current: $NEW_DOWNLOADS downloads, $NEW_POSTS posts, $NEW_UPVOTES upvotes"
          
          # 比较是否有变化
          if [ "$NEW_DOWNLOADS" != "${{ steps.prev_stats.outputs.old_downloads }}" ] || \
             [ "$NEW_POSTS" != "${{ steps.prev_stats.outputs.old_posts }}" ] || \
             [ "$NEW_UPVOTES" != "${{ steps.prev_stats.outputs.old_upvotes }}" ]; then
            echo "changed=true" >> $GITHUB_OUTPUT
            echo "✅ Stats changed, will commit"
          else
            echo "changed=false" >> $GITHUB_OUTPUT
            echo "⏭️ No changes, skipping commit"
          fi
      
      - name: Commit and push changes
        if: steps.check_changes.outputs.changed == 'true'
        run: |
          git config --local user.email "github-actions[bot]@users.noreply.github.com"
          git config --local user.name "github-actions[bot]"
          git add docs/community-stats.zh.md docs/community-stats.md docs/community-stats.json README.md README_CN.md
          git diff --staged --quiet || git commit -m "chore: update community stats $(date +'%Y-%m-%d')"
          git push
