name: Build and Release NfcAime.Dll on Tag

on:
  push:
    tags:
      - '*'

permissions:
  contents: write

jobs:
  build-and-release:
    runs-on: windows-latest

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

      - name: Setup NuGet
        uses: NuGet/setup-nuget@v2

      - name: Setup MSBuild
        uses: microsoft/setup-msbuild@v2

      - name: Restore NuGet packages
        run: nuget restore .\\PN532-Aime-Reader.sln

      - name: Build NfcAime.Dll (x64, no project references)
        run: msbuild .\\src\\NfcAime.Dll\\NfcAime.Dll.csproj /p:Configuration=Release /p:Platform="Any CPU" /p:PlatformTarget=x64 /p:BuildProjectReferences=false

      - name: Generate commit notes since previous tag
        shell: pwsh
        run: |
          $currentTag = "${{ github.ref_name }}"
          $prevTag = git tag --sort=-creatordate | Where-Object { $_ -ne $currentTag } | Select-Object -First 1

          if ($prevTag) {
            $range = "$prevTag..$currentTag"
            $commitTitle = "## Commits since $prevTag"
          } else {
            $range = $currentTag
            $commitTitle = "## Commits in $currentTag"
          }

          $commits = git log $range --pretty=format:"- %s (%h)"
          if (-not $commits) {
            $commits = "- No commits found."
          }

          @"
          ## Build Artifact
          - NfcAime.Dll.dll (Release, PlatformTarget=x64)

          $commitTitle
          $commits
          "@ | Out-File -FilePath RELEASE_NOTES.md -Encoding utf8

      - name: Create GitHub Release and upload DLL
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ github.ref_name }}
          body_path: RELEASE_NOTES.md
          files: |
            src/NfcAime.Dll/bin/Release/NfcAime.Dll.dll
          fail_on_unmatched_files: true
