name: Reusable Release Workflow

on:
  workflow_call:
    inputs:
      tag:
        description: 'Version tag (e.g., v1.0.0)'
        required: true
        type: string
      generate-notes:
        description: 'Auto-generate release notes'
        required: false
        type: boolean
        default: true

permissions:
  contents: write

jobs:
  release:
    name: Create Release
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Validate version tag
        run: |
          if ! [[ "${{ inputs.tag }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
            echo "Invalid version tag format. Expected vX.Y.Z"
            exit 1
          fi

      - name: Generate changelog
        id: changelog
        run: |
          PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
          if [ -z "$PREV_TAG" ]; then
            COMMITS=$(git log --pretty=format:"- %s" HEAD)
          else
            COMMITS=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD)
          fi
          # Use unique delimiter to prevent truncation if commit messages contain EOF
          DELIMITER="COMMITS_END_$(date +%s)"
          echo "commits<<${DELIMITER}" >> $GITHUB_OUTPUT
          echo "$COMMITS" >> $GITHUB_OUTPUT
          echo "${DELIMITER}" >> $GITHUB_OUTPUT

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ inputs.tag }}
          body: |
            ## Changes
            ${{ steps.changelog.outputs.commits }}
          generate_release_notes: ${{ inputs.generate-notes }}
