name: Check Version and Release

on:
  push:
    branches:
      - main
    paths:
      - 'package.json'

jobs:
  check-and-release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: "18.x"

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

      - name: Check if tag exists
        id: check-tag
        run: |
          if git rev-parse "${{ steps.package-version.outputs.VERSION }}" >/dev/null 2>&1; then
            echo "EXISTS=true" >> $GITHUB_OUTPUT
          else
            echo "EXISTS=false" >> $GITHUB_OUTPUT
          fi

      - name: Install packages
        if: steps.check-tag.outputs.EXISTS == 'false'
        run: npm install

      - name: Build plugin
        if: steps.check-tag.outputs.EXISTS == 'false'
        run: |
          npm run build

      - name: Extract release notes
        if: steps.check-tag.outputs.EXISTS == 'false'
        id: release-notes
        run: |
          version="${{ steps.package-version.outputs.VERSION }}"
          
          # Use awk to extract the section for the current version
          awk -v version="$version" '
            BEGIN { found=0; content="" }
            /^# [0-9]+\.[0-9]+\.[0-9]+/ {
              if (found) { exit }
              if ($2 ~ "^"version"($| \\()") { found=1; next }
            }
            found { content = content $0 "\n" }
            END { printf "%s", content }
          ' CHANGELOG.md > release_notes.txt
          
          # Escape multiline output for GitHub Actions
          echo "NOTES<<EOF" >> $GITHUB_OUTPUT
          cat release_notes.txt >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Create tag and release
        if: steps.check-tag.outputs.EXISTS == 'false'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # Create and push tag
          git config user.name "GitHub Actions"
          git config user.email "actions@github.com"
          git tag -a "${{ steps.package-version.outputs.VERSION }}" -m "Release version ${{ steps.package-version.outputs.VERSION }}"
          git push origin "${{ steps.package-version.outputs.VERSION }}"
          
          # Create release
          gh release create "${{ steps.package-version.outputs.VERSION }}" \
            --title="${{ steps.package-version.outputs.VERSION }}" \
            --notes="${{ steps.release-notes.outputs.NOTES }}" \
            main.js manifest.json styles.css

      - name: Send Discord notification
        if: steps.check-tag.outputs.EXISTS == 'false' && success()
        env:
          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # Get release URL using gh cli
          RELEASE_URL=$(gh release view "${{ steps.package-version.outputs.VERSION }}" --json url -q .url)
          
          # Create a JSON file with the message
          cat > discord_payload.json << EOF
          {
            "content": "🎉 New release ${{ steps.package-version.outputs.VERSION }} is now available!\n\n📝 Changes:\n${{ steps.release-notes.outputs.NOTES }}\n\n🔗 Release: $RELEASE_URL"
          }
          EOF
          
          # Send to Discord using curl
          curl -H "Content-Type: application/json" \
               -d @discord_payload.json \
               $DISCORD_WEBHOOK