name: Publish Pylume Package

on:
  push:
    tags:
      - "pylume-v*"
  workflow_dispatch:
    inputs:
      version:
        description: "Version to publish (without v prefix)"
        required: true
        default: "0.1.0"
  workflow_call:
    inputs:
      version:
        description: "Version to publish"
        required: true
        type: string
    outputs:
      version:
        description: "The version that was published"
        value: ${{ jobs.determine-version.outputs.version }}

# Adding permissions at workflow level
permissions:
  contents: write

jobs:
  determine-version:
    runs-on: macos-latest
    outputs:
      version: ${{ steps.get-version.outputs.version }}
    steps:
      - uses: actions/checkout@v4

      - name: Determine version
        id: get-version
        run: |
          if [ "${{ github.event_name }}" == "push" ]; then
            # Extract version from tag (for package-specific tags)
            if [[ "${{ github.ref }}" =~ ^refs/tags/pylume-v([0-9]+\.[0-9]+\.[0-9]+) ]]; then
              VERSION=${BASH_REMATCH[1]}
            else
              echo "Invalid tag format for pylume"
              exit 1
            fi
          elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
            # Use version from workflow dispatch
            VERSION=${{ github.event.inputs.version }}
          else
            # Use version from workflow_call
            VERSION=${{ inputs.version }}
          fi
          echo "VERSION=$VERSION"
          echo "version=$VERSION" >> $GITHUB_OUTPUT

  validate-version:
    runs-on: macos-latest
    needs: determine-version
    steps:
      - uses: actions/checkout@v4
      - name: Validate version
        id: validate-version
        run: |
          CODE_VERSION=$(grep '__version__' libs/python/pylume/pylume/__init__.py | cut -d'"' -f2)
          if [ "${{ needs.determine-version.outputs.version }}" != "$CODE_VERSION" ]; then
            echo "Version mismatch: expected $CODE_VERSION, got ${{ needs.determine-version.outputs.version }}"
            exit 1
          fi
          echo "Version validated: $CODE_VERSION"

  publish:
    needs: determine-version
    uses: ./.github/workflows/pypi-reusable-publish.yml
    with:
      package_name: "pylume"
      package_dir: "libs/python/pylume"
      version: ${{ needs.determine-version.outputs.version }}
      is_lume_package: true
      base_package_name: "pylume"
    secrets:
      PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
