name: Compile Windows binaries

on:
  push:
    branches: [ master, NET10 ]
  pull_request:
    branches: [ master ]
  release:
     types: 
       - published
       - prereleased
  workflow_dispatch:

jobs:
  build-x64:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v6
    - name: Setup .NET
      uses: actions/setup-dotnet@v5
      with:
        global-json-file: global.json
       
    - name: Restore dependencies
      run: dotnet restore -r win-x64 --configfile GalaxyBudsClient/nuget.config GalaxyBudsClient/GalaxyBudsClient.csproj
    - name: Build x64
      run: dotnet publish -f net10.0-windows10.0.19041 -r win-x64 -o bin_win64 -c Release -p:PublishSingleFile=true --self-contained true --no-restore GalaxyBudsClient/GalaxyBudsClient.csproj
    
    #- name: Sign executable
    #  uses: GabrielAcostaEngler/signtool-code-sign@v1.0.2
    #  with:
    #    certificate: ${{ secrets.SIGN_CERTIFICATE }}
    #    cert-password: ${{ secrets.SIGN_PASSWORD }}
    #    cert-sha1: 048de957759a1837a967e61b8c97c442f7b9ec24
    #    folder: bin_win64/
    #    timestamp-server: http://timestamp.digicert.com
    
    - name: Upload artifacts
      uses: actions/upload-artifact@v6
      with:
        name: GalaxyBudsClient_win64_portable
        path: bin_win64/
    
  build-x86:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v6
    - name: Setup .NET
      uses: actions/setup-dotnet@v5
      with:
        global-json-file: global.json
       
    - name: Restore dependencies
      run: dotnet restore -r win-x86 --configfile GalaxyBudsClient/nuget.config GalaxyBudsClient/GalaxyBudsClient.csproj
    - name: Build x86
      run: dotnet publish -f net10.0-windows10.0.19041 -r win-x86 -o bin_win32 -c Release -p:PublishSingleFile=true --self-contained true --no-restore GalaxyBudsClient/GalaxyBudsClient.csproj
    
    - name: Upload artifacts
      uses: actions/upload-artifact@v6
      with:
        name: GalaxyBudsClient_win32_portable
        path: bin_win32/
        

  make-nsis-installer:
    runs-on: windows-latest
    needs: [build-x64, build-x86]
        
    steps:
    - uses: actions/checkout@v6

    - name: Install NSIS
      run: choco install nsis -y --no-progress

    - name: Prepare version information (1/3)
      uses: oprypin/find-latest-tag@v1.1.2
      with:
        repository: timschneeb/GalaxyBudsClient
        releases-only: true
      id: last_release  
    - name: Prepare version information (2/3)
      uses: benjlevesque/short-sha@v3.0
      id: short-sha
      with:
        length: 6
    - name: Prepare version information (3/3)
      shell: bash
      run: echo 'version=${{steps.last_release.outputs.tag}}-${{steps.short-sha.outputs.sha}}' >> $GITHUB_OUTPUT
      id: version
      
    # Make x64 installer
    - name: Download artifact (x64)
      uses: actions/download-artifact@v7
      with:
        name: GalaxyBudsClient_win64_portable
        
    - name: Rename artifact (x64)
      run: ren GalaxyBudsClient.exe "Galaxy Buds Client.exe"
    
    - name: Create nsis installer (x64)
      uses: joncloud/makensis-action@v5.0
      with:
        script-file: "install.nsi"
        arguments: "-DBASE_DIR=\"D:\\a\\GalaxyBudsClient\\GalaxyBudsClient\" -DPRODUCT_VERSION=\"${{steps.version.outputs.version}}\" -DPRODUCT_ARCH=\"64bit\""

    #- name: Sign installer
    #  uses: GabrielAcostaEngler/signtool-code-sign@v1.0.2
    #  with:
    #    certificate: ${{ secrets.SIGN_CERTIFICATE }}
    #    cert-password: ${{ secrets.SIGN_PASSWORD }}
    #    cert-sha1: 048de957759a1837a967e61b8c97c442f7b9ec24
    #    folder: .
    #    timestamp-server: http://timestamp.digicert.com

    - name: Upload artifact (x64)
      uses: actions/upload-artifact@v6
      with:
        name: GalaxyBudsClient_Setup_64bit_${{steps.version.outputs.version}}.exe
        path: GalaxyBudsClient_Setup_64bit_${{steps.version.outputs.version}}.exe

    - name: Clean artifacts
      run: del "Galaxy Buds Client.exe"

    # Make x86 installer
    - name: Download artifact (x86)
      uses: actions/download-artifact@v7
      with:
        name: GalaxyBudsClient_win32_portable
        
    - name: Rename artifact (x86)
      run: ren GalaxyBudsClient.exe "Galaxy Buds Client.exe"

    - name: Create nsis installer (x86)
      uses: joncloud/makensis-action@v5.0
      with:
        script-file: "install.nsi"
        arguments: "-DBASE_DIR=\"D:\\a\\GalaxyBudsClient\\GalaxyBudsClient\" -DPRODUCT_VERSION=\"${{steps.version.outputs.version}}\" -DPRODUCT_ARCH=\"32bit\""

    #- name: Sign installer
    #  uses: GabrielAcostaEngler/signtool-code-sign@v1.0.2
    #  with:
    #    certificate: ${{ secrets.SIGN_CERTIFICATE }}
    #    cert-password: ${{ secrets.SIGN_PASSWORD }}
    #    cert-sha1: 048de957759a1837a967e61b8c97c442f7b9ec24
    #    folder: .
    #    timestamp-server: http://timestamp.digicert.com

    - name: Upload artifact (x86)
      uses: actions/upload-artifact@v6
      with:
        name: GalaxyBudsClient_Setup_32bit_${{steps.version.outputs.version}}.exe
        path: GalaxyBudsClient_Setup_32bit_${{steps.version.outputs.version}}.exe

  attach-to-release:
    runs-on: windows-latest
    needs: [make-nsis-installer]
    if: github.event_name == 'release'
    
    steps:
    - name: Prepare version information (1/3)
      uses: oprypin/find-latest-tag@v1.1.2
      with:
        repository: timschneeb/GalaxyBudsClient
        releases-only: true
      id: last_release  
      
    - name: Prepare version information (2/3)
      uses: benjlevesque/short-sha@v3.0
      id: short-sha
      with:
        length: 6
    - name: Prepare version information (3/3)
      shell: bash
      run: echo 'version=${{steps.last_release.outputs.tag}}-${{steps.short-sha.outputs.sha}}' >> $GITHUB_OUTPUT
      id: version
      
    - name: Download setup artifact (x64)
      uses: actions/download-artifact@v7
      with:
        name: GalaxyBudsClient_Setup_64bit_${{steps.version.outputs.version}}.exe

    - name: Download portable artifact (x64)
      uses: actions/download-artifact@v7
      with:
        name: GalaxyBudsClient_win64_portable

    - name: Rename (x64)
      run: |
        ren GalaxyBudsClient_Setup_64bit_${{steps.version.outputs.version}}.exe GalaxyBudsClient_Windows_64bit_Setup.exe
        ren GalaxyBudsClient.exe GalaxyBudsClient_Windows_64bit_Portable.exe

    - uses: AButler/upload-release-assets@v3.0.1
      with:
        files: '*.exe'
        repo-token: ${{ secrets.GH_TOKEN }}

  release-on-winget:
    runs-on: windows-latest
    needs: [attach-to-release]
    if: github.event_name == 'release'

    steps:
    - name: Prepare version information (1/2)
      uses: oprypin/find-latest-tag@v1.1.2
      with:
        repository: timschneeb/GalaxyBudsClient
        releases-only: true
      id: last_release  
      
    - name: Prepare version information (2/2)
      uses: benjlevesque/short-sha@v3.0
      id: short-sha
      with:
        length: 6
    
    - name: Release on WinGet
      uses: vedantmgoyal9/winget-releaser@v2
      with:
        identifier: timschneeb.GalaxyBudsClient
        version: '${{steps.last_release.outputs.tag}}-${{steps.short-sha.outputs.sha}}'
        token: ${{ secrets.WINGET_TOKEN }}

