name: Build and Release NSIS Installer
on: [push]

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

    steps:
      - name: Check out repository
        uses: actions/checkout@v4

      - name: Set up Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: Install Node.js, NPM and Yarn
        uses: actions/setup-node@v4
        with:
          node-version: 22

      - name: Vue Builder
        working-directory: freedata_gui
        run: |
          npm i
          npm run build

      - name: LIST ALL FILES
        run: ls -R

      - name: Install Python dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - uses: robinraju/release-downloader@v1.12
        with:
          repository: "Hamlib/Hamlib"
          fileName: "hamlib-w64-*.zip"
          # latest: true
          extract: true
          tag: '4.5.5'
          out-file-path: "freedata_server/lib/hamlib"

      - name: Move Hamlib Files
        working-directory: freedata_server
        run: |
          # Find the downloaded folder (handle version numbers dynamically)
          $HAMLIB_DIR = Get-ChildItem -Directory -Path lib/hamlib -Filter "hamlib-w64*" | Select-Object -First 1
          # Move all contents from the found directory to the target directory
          Move-Item "$($HAMLIB_DIR.FullName)\*" "lib/hamlib" -Force
          # Remove the now empty versioned directory
          Remove-Item "$($HAMLIB_DIR.FullName)" -Recurse -Force
        shell: pwsh


      - name: Build binaries
        working-directory: freedata_server
        run: |
          python3 -m nuitka `
            --remove-output `
            --assume-yes-for-downloads `
            --follow-imports `
            --include-data-dir=lib=lib `
            --include-data-dir=../freedata_gui/dist=gui `
            --include-data-files=lib/codec2/*=lib/codec2/ `
            --include-data-files=lib/hamlib/bin/*.exe=lib/hamlib/bin/ `
            --include-data-files=lib/hamlib/bin/*.dll=lib/hamlib/bin/ `
            --include-data-files=config.ini.example=config.ini `
            --standalone server.py `
            --output-filename=freedata-server
        shell: pwsh


      - name: LIST ALL FILES
        run: ls -R

      - name: Create installer
        uses: joncloud/makensis-action@v4.1
        with:
          script-file: "freedata-nsis-config.nsi"
          arguments: '/V3'

      - name: LIST ALL FILES
        working-directory: freedata_server/server.dist
        run: ls -R

      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: 'FreeDATA-Installer'
          path: ./FreeDATA-Installer.exe

      - name: Upload Installer to Release
        uses: softprops/action-gh-release@v2
        if: startsWith(github.ref, 'refs/tags/v')
        with:
          draft: false
          files: ./FreeDATA-Installer.exe
          tag_name: ${{ github.ref_name }}
