name: 🔄 Version Migration - Deprecate Old + Publish New

# Manual trigger only - one-time migration
on:
  workflow_dispatch:
    inputs:
      deprecate_puppeteer:
        description: '🚫 Deprecate old brave-real-puppeteer-core versions'
        required: false
        default: true
        type: boolean
      deprecate_playwright:
        description: '🚫 Deprecate old brave-real-playwright-core versions'
        required: false
        default: true
        type: boolean
      publish_new:
        description: '🚀 Publish new versions with upstream-aligned scheme'
        required: false
        default: true
        type: boolean
      dry_run:
        description: '🧪 Dry run (show commands without executing)'
        required: false
        default: false
        type: boolean

env:
  NODE_VERSION: '20'

jobs:
  migrate:
    name: 🔄 Version Migration
    runs-on: ubuntu-latest
    
    steps:
      - name: 📥 Checkout
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.GH_TOKEN || github.token }}
          fetch-depth: 0

      - name: 🟢 Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
          registry-url: 'https://registry.npmjs.org'

      - name: ⚙️ Configure Git
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"

      - name: 📦 Install Dependencies
        run: npm install

      - name: 🔍 Get Current Versions
        id: versions
        run: |
          # Get upstream versions
          PUPPETEER_UPSTREAM=$(npm view puppeteer-core version)
          PLAYWRIGHT_UPSTREAM=$(npm view playwright-core version)
          
          echo "puppeteer_upstream=$PUPPETEER_UPSTREAM" >> $GITHUB_OUTPUT
          echo "playwright_upstream=$PLAYWRIGHT_UPSTREAM" >> $GITHUB_OUTPUT
          
          echo "📦 Upstream puppeteer-core: $PUPPETEER_UPSTREAM"
          echo "📦 Upstream playwright-core: $PLAYWRIGHT_UPSTREAM"
          
          # New versions
          echo "📦 New brave-real-puppeteer-core: ${PUPPETEER_UPSTREAM}-brave.1"
          echo "📦 New brave-real-playwright-core: ${PLAYWRIGHT_UPSTREAM}-brave.1"

      - name: 🚫 Deprecate Old brave-real-puppeteer-core Versions
        if: github.event.inputs.deprecate_puppeteer == 'true'
        run: |
          echo "🚫 Deprecating old brave-real-puppeteer-core versions..."
          
          DEPRECATION_MSG="This version uses old versioning. Please use ${{ steps.versions.outputs.puppeteer_upstream }}-brave.x versions which align with upstream puppeteer-core."
          
          if [ "${{ github.event.inputs.dry_run }}" = "true" ]; then
            echo "🧪 DRY RUN - Would deprecate: brave-real-puppeteer-core@<25.0.0"
            echo "Message: $DEPRECATION_MSG"
          else
            # Deprecate all versions less than 25.0.0 (covers all 24.52.x, 24.53.x etc)
            npm deprecate "brave-real-puppeteer-core@<25.0.0" "$DEPRECATION_MSG" || echo "Some versions may already be deprecated"
            echo "✅ Old versions deprecated"
          fi
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: 🚫 Deprecate Old brave-real-playwright-core Versions  
        if: github.event.inputs.deprecate_playwright == 'true'
        run: |
          echo "🚫 Deprecating old brave-real-playwright-core versions..."
          
          DEPRECATION_MSG="This version uses old versioning. Please use ${{ steps.versions.outputs.playwright_upstream }}-brave.x versions which align with upstream playwright-core."
          
          if [ "${{ github.event.inputs.dry_run }}" = "true" ]; then
            echo "🧪 DRY RUN - Would deprecate versions not matching X.Y.Z-brave.N pattern"
            echo "Message: $DEPRECATION_MSG"
          else
            # Deprecate versions with -patch suffix (old scheme)
            npm deprecate "brave-real-playwright-core@*-patch.*" "$DEPRECATION_MSG" || echo "Some versions may already be deprecated"
            echo "✅ Old versions deprecated"
          fi
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: 📝 Update Package Versions
        if: github.event.inputs.publish_new == 'true'
        run: |
          echo "📝 Updating package.json versions..."
          
          PUPPETEER_NEW="${{ steps.versions.outputs.puppeteer_upstream }}-brave.1"
          PLAYWRIGHT_NEW="${{ steps.versions.outputs.playwright_upstream }}-brave.1"
          
          # Update puppeteer-core package.json
          node -e "
            const fs = require('fs');
            const pkg = require('./packages/brave-real-puppeteer-core/package.json');
            pkg.version = '$PUPPETEER_NEW';
            pkg.brave = pkg.brave || {};
            pkg.brave.basedOn = { 'puppeteer-core': '${{ steps.versions.outputs.puppeteer_upstream }}' };
            pkg.brave.versionScheme = 'upstream-aligned';
            fs.writeFileSync('./packages/brave-real-puppeteer-core/package.json', JSON.stringify(pkg, null, 2) + '\n');
            console.log('✅ Updated brave-real-puppeteer-core to', pkg.version);
          "
          
          # Update playwright-core package.json
          node -e "
            const fs = require('fs');
            const pkg = require('./packages/brave-real-playwright-core/package.json');
            pkg.version = '$PLAYWRIGHT_NEW';
            pkg.brave = pkg.brave || {};
            pkg.brave.basedOn = pkg.brave.basedOn || {};
            pkg.brave.basedOn['playwright-core'] = '${{ steps.versions.outputs.playwright_upstream }}';
            pkg.brave.versionScheme = 'upstream-aligned';
            fs.writeFileSync('./packages/brave-real-playwright-core/package.json', JSON.stringify(pkg, null, 2) + '\n');
            console.log('✅ Updated brave-real-playwright-core to', pkg.version);
          "

      - name: 🚀 Publish brave-real-puppeteer-core
        if: github.event.inputs.publish_new == 'true' && github.event.inputs.dry_run != 'true'
        run: |
          cd packages/brave-real-puppeteer-core
          npm publish --access public
          echo "✅ Published brave-real-puppeteer-core@${{ steps.versions.outputs.puppeteer_upstream }}-brave.1"
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: 🚀 Publish brave-real-playwright-core
        if: github.event.inputs.publish_new == 'true' && github.event.inputs.dry_run != 'true'
        run: |
          cd packages/brave-real-playwright-core
          npm publish --access public
          echo "✅ Published brave-real-playwright-core@${{ steps.versions.outputs.playwright_upstream }}-brave.1"
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: 📝 Commit Changes
        if: github.event.inputs.publish_new == 'true' && github.event.inputs.dry_run != 'true'
        run: |
          git add .
          git commit -m "🔄 Version migration: aligned with upstream versioning [skip ci]" || echo "No changes"
          git push origin HEAD || echo "Push failed"

      - name: 📋 Summary
        run: |
          echo "## 🔄 Version Migration Summary" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### Actions Taken" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "| Action | Status |" >> $GITHUB_STEP_SUMMARY
          echo "|--------|--------|" >> $GITHUB_STEP_SUMMARY
          echo "| Deprecate old puppeteer versions | ${{ github.event.inputs.deprecate_puppeteer }} |" >> $GITHUB_STEP_SUMMARY
          echo "| Deprecate old playwright versions | ${{ github.event.inputs.deprecate_playwright }} |" >> $GITHUB_STEP_SUMMARY
          echo "| Publish new versions | ${{ github.event.inputs.publish_new }} |" >> $GITHUB_STEP_SUMMARY
          echo "| Dry run | ${{ github.event.inputs.dry_run }} |" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### New Versioning Scheme" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "| Package | Old Version | New Version |" >> $GITHUB_STEP_SUMMARY
          echo "|---------|-------------|-------------|" >> $GITHUB_STEP_SUMMARY
          echo "| brave-real-puppeteer-core | 24.52.x/24.53.x | ${{ steps.versions.outputs.puppeteer_upstream }}-brave.1 |" >> $GITHUB_STEP_SUMMARY
          echo "| brave-real-playwright-core | 1.57.0-patch.x | ${{ steps.versions.outputs.playwright_upstream }}-brave.1 |" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### Version Format" >> $GITHUB_STEP_SUMMARY
          echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
          echo "brave-real-puppeteer-core@24.36.1-brave.1" >> $GITHUB_STEP_SUMMARY
          echo "                         ↑       ↑" >> $GITHUB_STEP_SUMMARY
          echo "                   upstream    patch" >> $GITHUB_STEP_SUMMARY
          echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
