name: Deploy to Cloudflare Pages

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      deployments: write
    
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '21'

      - name: Install dependencies
        run: |
          cd oauth
          npm install

      - name: Build OAuth app
        run: |
          cd oauth
          npm run build
          
      - name: Copy OAuth build to static
        run: |
          # Remove old assets (following run.zsh pattern)
          rm -rf my-blog/static/assets
          # Copy all dist files to static
          cp -rf oauth/dist/* my-blog/static/
          # Copy index.html to oauth-assets.html template
          cp oauth/dist/index.html my-blog/templates/oauth-assets.html
          
      - name: Cache ailog binary
        uses: actions/cache@v4
        with:
          path: ./bin
          key: ailog-bin-${{ runner.os }}
          restore-keys: |
            ailog-bin-${{ runner.os }}
            
      - name: Setup ailog binary
        run: |
          # Get expected version from Cargo.toml
          EXPECTED_VERSION=$(grep '^version' Cargo.toml | cut -d'"' -f2)
          echo "Expected version from Cargo.toml: $EXPECTED_VERSION"
          
          # Check current binary version if exists
          if [ -f "./bin/ailog" ]; then
            CURRENT_VERSION=$(./bin/ailog --version 2>/dev/null || echo "unknown")
            echo "Current binary version: $CURRENT_VERSION"
          else
            CURRENT_VERSION="none"
            echo "No binary found"
          fi
          
          # Check OS
          OS="${{ runner.os }}"
          echo "Runner OS: $OS"
          
          # Use pre-packaged binary if version matches or extract from tar.gz
          if [ "$CURRENT_VERSION" = "$EXPECTED_VERSION" ]; then
            echo "Binary is up to date"
            chmod +x ./bin/ailog
          elif [ "$OS" = "Linux" ] && [ -f "./bin/ailog-linux-x86_64.tar.gz" ]; then
            echo "Extracting ailog from pre-packaged tar.gz..."
            cd bin
            tar -xzf ailog-linux-x86_64.tar.gz
            chmod +x ailog
            cd ..
            
            # Verify extracted version
            EXTRACTED_VERSION=$(./bin/ailog --version 2>/dev/null || echo "unknown")
            echo "Extracted binary version: $EXTRACTED_VERSION"
            
            if [ "$EXTRACTED_VERSION" != "$EXPECTED_VERSION" ]; then
              echo "Warning: Binary version mismatch. Expected $EXPECTED_VERSION but got $EXTRACTED_VERSION"
            fi
          else
            echo "Error: No suitable binary found for OS: $OS"
            exit 1
          fi

      - name: Build site with ailog
        run: |
          cd my-blog
          ../bin/ailog build

      - name: List public directory
        run: |
          ls -la my-blog/public/
          
      - name: Deploy to Cloudflare Pages
        uses: cloudflare/pages-action@v1
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          projectName: ${{ secrets.CLOUDFLARE_PROJECT_NAME }}
          directory: my-blog/public
          gitHubToken: ${{ secrets.GITHUB_TOKEN }}
          wranglerVersion: '3'