name: Manual Publish to NPM

on:
  workflow_dispatch:
    inputs:
      version:
        description: 'Version to publish (e.g., 1.0.1)'
        required: true
        type: string
      create_release:
        description: 'Create GitHub release'
        required: false
        default: true
        type: boolean

jobs:
  publish:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          registry-url: 'https://registry.npmjs.org'
          
      - name: Install dependencies
        run: npm ci
        
      - name: Install admin dependencies
        working-directory: ./lib/admin
        run: npm ci
        
      - name: Build admin UI
        working-directory: ./lib/admin
        run: npm run build
        
      - name: Update version
        run: |
          npm version ${{ github.event.inputs.version }} --no-git-tag-version
          
      - name: Commit version changes
        run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git add package.json package-lock.json
          git commit -m "Release version ${{ github.event.inputs.version }}"
          
      - name: Create Git tag
        run: |
          git tag v${{ github.event.inputs.version }}
          git push origin main --tags
          
      - name: Publish to NPM
        run: npm publish --access public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          
      - name: Generate release notes
        if: github.event.inputs.create_release == 'true'
        id: release-notes
        run: |
          # Get commit messages since last tag
          LAST_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "")
          
          if [ -n "$LAST_TAG" ]; then
            COMMITS=$(git log ${LAST_TAG}..HEAD~1 --pretty=format:"- %s" --no-merges)
          else
            COMMITS=$(git log --pretty=format:"- %s" --no-merges -10 HEAD~1)
          fi
          
          # Create release notes
          cat << EOF > release_notes.md
          # Release ${{ github.event.inputs.version }}
          
          ## Changes
          
          $COMMITS
          
          ## Installation
          
          \`\`\`bash
          npm install @digitalnodecom/node-red-contrib-analyzer@${{ github.event.inputs.version }}
          \`\`\`
          
          ## Dashboard
          
          After installation, access the analyzer dashboard at: \`http://localhost:1880/analyzer\`
          EOF
          
      - name: Create GitHub Release
        if: github.event.inputs.create_release == 'true'
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: v${{ github.event.inputs.version }}
          release_name: ${{ github.event.inputs.version }}
          body_path: release_notes.md
          draft: false
          prerelease: false