name: Publish to npm

on:
  push:
    branches:
      - main

permissions:
  id-token: write
  contents: read

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          registry-url: 'https://registry.npmjs.org'

      - name: Check if version changed
        id: version-check
        run: |
          PACKAGE_NAME=$(node -p "require('./package.json').name")
          LOCAL_VERSION=$(node -p "require('./package.json').version")
          NPM_VERSION=$(npm view "$PACKAGE_NAME" version 2>/dev/null || echo "0.0.0")
          echo "local=$LOCAL_VERSION" >> $GITHUB_OUTPUT
          echo "npm=$NPM_VERSION" >> $GITHUB_OUTPUT
          if [ "$LOCAL_VERSION" != "$NPM_VERSION" ]; then
            echo "changed=true" >> $GITHUB_OUTPUT
          else
            echo "changed=false" >> $GITHUB_OUTPUT
          fi

      - name: Publish to npm
        if: steps.version-check.outputs.changed == 'true'
        run: npm publish

      - name: Skip publish (version unchanged)
        if: steps.version-check.outputs.changed == 'false'
        run: |
          echo "Version ${{ steps.version-check.outputs.local }} already exists on npm. Skipping publish."
