name: Upload (Steam)

on:
  workflow_call:
    inputs:
      version:
        required: true
        type: string
      trigger_type:
        required: true
        type: string

jobs:
  upload:
    name: Upload (Steam)

    runs-on: ubuntu-latest

    steps:
    - name: Download source
      uses: actions/download-artifact@v6
      with:
        name: internal-source
        path: internal-source

    - name: Download bundle (Windows x86)
      uses: actions/download-artifact@v6
      with:
        name: openttd-windows-x86
        path: openttd-windows-x86

    - name: Download bundle (Windows x64)
      uses: actions/download-artifact@v6
      with:
        name: openttd-windows-x64
        path: openttd-windows-x64

    - name: Download bundle (MacOS)
      uses: actions/download-artifact@v6
      with:
        name: openttd-macos-universal
        path: openttd-macos-universal

    - name: Download bundle (Linux)
      uses: actions/download-artifact@v6
      with:
        name: openttd-linux-generic
        path: openttd-linux-generic

    - name: Setup steamcmd
      uses: CyberAndrii/setup-steamcmd@v1

    - name: Generate Steam auth code
      id: steam-totp
      uses: CyberAndrii/steam-totp@v1
      with:
        shared_secret: ${{ secrets.STEAM_SHARED_SECRET }}

    - name: Upload to Steam
      run: |
        echo "::group::Extracting source"
        mkdir source
        (
          cd source
          tar -xf ../internal-source/source.tar.gz --strip-components=1
        )
        echo "::endgroup::"

        mkdir steam
        (
          cd steam

          echo "::group::Prepare Win32"
          unzip ../openttd-windows-x86/openttd-*-windows-win32.zip
          mv openttd-*-windows-win32 steam-win32
          echo "::endgroup::"

          echo "::group::Prepare Win64"
          unzip ../openttd-windows-x64/openttd-*-windows-win64.zip
          mv openttd-*-windows-win64 steam-win64
          echo "::endgroup::"

          echo "::group::Prepare macOS"
          mkdir steam-macos
          (
            cd steam-macos
            unzip ../../openttd-macos-universal/openttd-*-macos-universal.zip
          )
          echo "::endgroup::"

          echo "::group::Prepare Linux"
          tar xvf ../openttd-linux-generic/openttd-*-linux-generic-amd64.tar.xz
          mv openttd-*-linux-generic-amd64 steam-linux
          echo "::endgroup::"

          echo "::group::Preparing build file"
          if [ "${{ inputs.trigger_type }}" = "new-tag" ]; then
            BRANCH="testing"
          else
            BRANCH="nightly"
          fi
          cat ../source/os/steam/release.vdf | sed 's/@@DESCRIPTION@@/openttd-${{ inputs.version }}/;s/@@BRANCH@@/'${BRANCH}'/' > release.vdf
          cat release.vdf
          echo "::endgroup::"

          echo "::group::Upload to Steam"
          steamcmd +login ${{ secrets.STEAM_USERNAME }} ${{ secrets.STEAM_PASSWORD }} ${{ steps.steam-totp.outputs.code }} +run_app_build $(pwd)/release.vdf +quit
          echo "::endgroup::"
        )
