name: Beta Release

on:
  push:
    branches:
      - beta
    tags:
      - 'v*-beta.*'

permissions:
  contents: write

jobs:
  build-and-release:
    runs-on: ubuntu-latest
    environment: beta
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Setup Bun
        uses: oven-sh/setup-bun@v2
        with:
          bun-version: '1.3.1'

      - name: Install dependencies
        run: bun install

      - name: Build extension
        run: bun run build
        env:
          NODE_ENV: production

      - name: Get version from package.json
        id: version
        run: |
          VERSION=$(node -p "require('./package.json').version")
          echo "version=$VERSION" >> $GITHUB_OUTPUT
          echo "Building version: $VERSION"

      - name: Generate changelog
        id: changelog
        run: |
          # Get the latest beta or production tag
          PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
          
          if [ -z "$PREVIOUS_TAG" ]; then
            echo "No previous tag found, using all commits"
            COMMITS=$(git log --pretty=format:"- %s (%h)" HEAD)
          else
            echo "Generating changelog from $PREVIOUS_TAG to HEAD"
            COMMITS=$(git log --pretty=format:"- %s (%h)" ${PREVIOUS_TAG}..HEAD)
          fi
          
          # Create changelog with categorization
          FEATURES=$(echo "$COMMITS" | grep -i "^- feat" || echo "")
          FIXES=$(echo "$COMMITS" | grep -i "^- fix" || echo "")
          CHORES=$(echo "$COMMITS" | grep -i "^- chore\|^- docs\|^- style\|^- refactor" || echo "")
          OTHER=$(echo "$COMMITS" | grep -v -i "^- feat\|^- fix\|^- chore\|^- docs\|^- style\|^- refactor" || echo "")
          
          {
            echo "changelog<<EOF"
            if [ -n "$FEATURES" ]; then
              echo "### ✨ Features"
              echo "$FEATURES"
              echo ""
            fi
            if [ -n "$FIXES" ]; then
              echo "### 🐛 Bug Fixes"
              echo "$FIXES"
              echo ""
            fi
            if [ -n "$CHORES" ]; then
              echo "### 🔧 Maintenance"
              echo "$CHORES"
              echo ""
            fi
            if [ -n "$OTHER" ]; then
              echo "### 📝 Other Changes"
              echo "$OTHER"
            fi
            echo "EOF"
          } >> $GITHUB_OUTPUT

      - name: Check if release exists
        id: check_release
        run: |
          if gh release view "v${{ steps.version.outputs.version }}" >/dev/null 2>&1; then
            echo "exists=true" >> $GITHUB_OUTPUT
          else
            echo "exists=false" >> $GITHUB_OUTPUT
          fi
        env:
          GH_TOKEN: ${{ github.token }}

      - name: Create or Update GitHub Pre-Release
        run: |
          RELEASE_NOTES=$(cat <<EOF
          ## 🧪 Mue Beta v${{ steps.version.outputs.version }}
          
          **⚠️ This is a beta release for testing purposes only.**
          
          ### Testing Instructions
          1. Download the appropriate ZIP file below
          2. For Chrome: Load as unpacked extension or install from [unlisted link](https://chromewebstore.google.com/detail/mue/bngmbednanpcfochchhgbkookpiaiaid) (dev team only)
          3. For Firefox: Install via about:debugging → Load Temporary Add-on
          4. Report issues at https://github.com/mue/mue/issues
          
          ${{ steps.changelog.outputs.changelog }}
          
          ### Installation Files
          - **Chrome/Edge**: \`chrome-${{ steps.version.outputs.version }}.zip\`
          - **Firefox**: \`firefox-${{ steps.version.outputs.version }}.zip\`
          
          ---
          
          **🔗 Demo**: [demo.muetab.com](https://demo.muetab.com)
          **📱 Beta Branch Demo**: [mue-git-beta-mue.vercel.app](https://mue-git-beta-mue.vercel.app)
          EOF
          )
          
          if [ "${{ steps.check_release.outputs.exists }}" = "true" ]; then
            echo "Updating existing release..."
            gh release edit "v${{ steps.version.outputs.version }}" \
              --notes "$RELEASE_NOTES" \
              --prerelease
            
            # Upload new files (will replace if they exist)
            gh release upload "v${{ steps.version.outputs.version }}" \
              "build/chrome-${{ steps.version.outputs.version }}.zip" \
              "build/firefox-${{ steps.version.outputs.version }}.zip" \
              --clobber
          else
            echo "Creating new release..."
            gh release create "v${{ steps.version.outputs.version }}" \
              "build/chrome-${{ steps.version.outputs.version }}.zip" \
              "build/firefox-${{ steps.version.outputs.version }}.zip" \
              --title "Beta v${{ steps.version.outputs.version }}" \
              --notes "$RELEASE_NOTES" \
              --prerelease
          fi
        env:
          GH_TOKEN: ${{ github.token }}

      - name: Output release info
        run: |
          echo "## 🎉 Beta Release Created!" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "**Version**: v${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
          echo "**Release URL**: https://github.com/${{ github.repository }}/releases/tag/v${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### 📦 Build Artifacts" >> $GITHUB_STEP_SUMMARY
          echo "- Chrome/Edge: \`chrome-${{ steps.version.outputs.version }}.zip\`" >> $GITHUB_STEP_SUMMARY
          echo "- Firefox: \`firefox-${{ steps.version.outputs.version }}.zip\`" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### 🧪 Testing" >> $GITHUB_STEP_SUMMARY
          echo "Share the release link with beta testers for feedback." >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### ⚠️ Next Steps" >> $GITHUB_STEP_SUMMARY
          echo "1. Test the beta release thoroughly" >> $GITHUB_STEP_SUMMARY
          echo "2. Gather feedback from testers" >> $GITHUB_STEP_SUMMARY
          echo "3. Fix any critical issues" >> $GITHUB_STEP_SUMMARY
          echo "4. When ready, create PR from \`beta\` → \`main\` for production release" >> $GITHUB_STEP_SUMMARY
