name: Windows Build Steps - Qt

on:
  workflow_call:
    inputs:
      jobName:
        required: true
        type: string
      artifactPrefixName:
        required: true
        type: string
      os:
        required: false
        type: string
        default: windows-2022
      platform:
        required: false
        type: string
        default: x64
      configuration:
        required: true
        type: string
      simd:
        required: false
        type: string
        default: AVX2
      buildSystem:
        required: false
        type: string
        default: msbuild
      cmakeFlags:
        required: false
        type: string
        default: ""
      patchesUrl:
        required: false
        type: string
        default: https://github.com/PCSX2/pcsx2_patches/releases/latest/download
      fetchTags:
        required: false
        type: boolean
        default: false
      stableBuild:
        required: false
        type: boolean
        default: false

jobs:
  build_windows_qt:
    name: ${{ inputs.jobName }}
    runs-on: ${{ inputs.os }}
    # Set some sort of timeout in the event of run-away builds.  We are limited on concurrent jobs so, get rid of them.
    timeout-minutes: 90
    env:
      POWERSHELL_TELEMETRY_OPTOUT: 1

    steps:
      - name: Tempfix Clang
        if: inputs.configuration == 'CMake'
        run: choco uninstall llvm
        
      - name: Checkout Repository
        uses: actions/checkout@v4

      # actions/checkout elides tags, fetch them primarily for releases
      - name: Fetch Tags
        if: ${{ inputs.fetchTags }}
        run: git fetch --tags --no-recurse-submodules

      - name: Add stable release identifier file
        if: ${{ inputs.stableBuild == true || inputs.stableBuild == 'true' }}
        shell: bash
        run: |
          echo "#define DEFAULT_UPDATER_CHANNEL \"stable\"" > ./pcsx2-qt/DefaultUpdaterChannel.h
          cat ./pcsx2-qt/DefaultUpdaterChannel.h

      - name: Prepare Artifact Metadata
        id: artifact-metadata
        shell: bash
        env:
          PREFIX: ${{ inputs.artifactPrefixName }}
          EVENT_NAME: ${{ github.event_name }}
          PR_TITLE: ${{ github.event.pull_request.title }}
          PR_NUM: ${{ github.event.pull_request.number }}
          PR_SHA: ${{ github.event.pull_request.head.sha }}
        run: ./.github/workflows/scripts/common/name-artifacts.sh

      - name: Setup msbuild
        if: inputs.configuration != 'CMake'
        uses: microsoft/setup-msbuild@v2

      - name: Download patches
        shell: cmd
        run: |
          cd bin/resources
          aria2c -Z "${{ inputs.patchesUrl }}/patches.zip"

      - name: Cache Dependencies
        id: cache-deps
        uses: actions/cache@v4
        with:
          path: deps
          key: ${{ inputs.os }} ${{ inputs.platform }} deps ${{ hashFiles('.github/workflows/scripts/windows/build-dependencies.bat', '.github/workflows/scripts/common/*.patch') }}

      - name: Build Dependencies
        if: steps.cache-deps.outputs.cache-hit != 'true'
        env:
          DEBUG: 0
        run: .github/workflows/scripts/windows/build-dependencies.bat

      - name: Generate CMake
        if: inputs.configuration == 'CMake'
        id: cmake
        shell: cmd
        run: |
          call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          cmake . -B build ${{ inputs.cmakeFlags }} "-DCMAKE_PREFIX_PATH=%cd%\deps" -DQT_BUILD=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DDISABLE_ADVANCE_SIMD=ON -G Ninja

      - name: Build PCSX2
        shell: cmd
        run: |
          if "${{ inputs.configuration }}"=="CMake" (
            call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
            cmake --build build --config Release || exit /b
            cmake --install build --config Release || exit /b
          ) else (
            msbuild "PCSX2_qt.sln" /m /v:m /p:Configuration="${{ inputs.configuration }}" /p:Platform="${{ inputs.platform }}"
          )

      - name: Run Tests
        if: inputs.configuration == 'CMake'
        shell: cmd
        run: |
          call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          set PATH=%PATH%;%GITHUB_WORKSPACE%\bin
          cmake --build build --config Release --target unittests

      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.artifact-metadata.outputs.artifact-name }}
          path: |
            ./bin
            !./bin/**/*.bsc
            !./bin/**/*.exp
            !./bin/**/*.ilk
            !./bin/**/*.iobj
            !./bin/**/*.ipdb
            !./bin/**/*.pdb
            !./bin/**/*.lib

      - name: Upload artifact - with symbols
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.artifact-metadata.outputs.artifact-name }}-symbols
          path: ./bin/**/*.pdb