name: Deploy release
on: 
  workflow_dispatch:
    inputs:
      changelog0:
        description: 'Enter the changelog lines for this release. Each line is a feature / bullet point. Do not use dash.'
        required: true
        type: string
      changelog1:
        description: 'Feature 2'
        required: false
        type: string
      changelog2:
        description: 'Feature 3'
        required: false
        type: string
      changelog3:
        description: 'Feature 4'
        required: false
        type: string
      changelog4:
        description: 'Feature 5'
        required: false
        type: string
      changelog5:
        description: 'Feature 6'
        required: false
        type: string
      changelog6:
        description: 'Feature 7'
        required: false
        type: string
      changelog7:
        description: 'Feature 8'
        required: false
        type: string
      changelog8:
        description: 'Feature 9'
        required: false
        type: string
      changelog9:
        description: 'Feature 10'
        required: false
        type: string

jobs:
  calculate-version:
    name: Calculate Version
    uses: ./.github/workflows/determine_release_version.yml
  call-release-build:
    uses: ./.github/workflows/build.yml
    needs: calculate-version
    with:
      next_version_major: ${{ needs.calculate-version.outputs.next_version_major }}
      next_version_minor: ${{ needs.calculate-version.outputs.next_version_minor }}
  deploy:
    name: Deploy release
    runs-on: ubuntu-22.04
    needs: [call-release-build, calculate-version]
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Generate changelog
        id: generate_changelog
        run: |
          CHANGELOG=""
          if [ -n "${{ github.event.inputs.changelog0 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog0 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog1 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog1 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog2 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog2 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog3 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog3 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog4 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog4 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog5 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog5 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog6 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog6 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog7 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog7 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog8 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog8 }}\n"; fi
          if [ -n "${{ github.event.inputs.changelog9 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog9 }}\n"; fi
          echo -e "$CHANGELOG"
          echo "RELEASE_BODY=$CHANGELOG" >> $GITHUB_ENV
      - uses: actions/download-artifact@v4
        with:
          name: cemu-bin-linux-x64
          path: cemu-bin-linux-x64

      - uses: actions/download-artifact@v4
        with:
          name: cemu-appimage-x64
          path: cemu-appimage-x64

      - uses: actions/download-artifact@v4
        with:
          name: cemu-bin-windows-x64
          path: cemu-bin-windows-x64

      - uses: actions/download-artifact@v4
        with:
          name: cemu-bin-macos-x64
          path: cemu-bin-macos-x64

      - name: Initialize
        run: |
          mkdir upload
          sudo apt install zip
          
      - name: Set version dependent vars
        run: |
          echo "Version: ${{ needs.calculate-version.outputs.next_version }}"
          echo "CEMU_FOLDER_NAME=Cemu_${{ needs.calculate-version.outputs.next_version }}"
          echo "CEMU_VERSION=${{ needs.calculate-version.outputs.next_version }}"
          echo "CEMU_FOLDER_NAME=Cemu_${{ needs.calculate-version.outputs.next_version }}" >> $GITHUB_ENV
          echo "CEMU_VERSION=${{ needs.calculate-version.outputs.next_version }}" >> $GITHUB_ENV

      - name: Create release from windows-bin
        run: |
          ls ./
          ls ./bin/
          cp -R ./bin ./${{ env.CEMU_FOLDER_NAME }}
          mv cemu-bin-windows-x64/Cemu.exe ./${{ env.CEMU_FOLDER_NAME }}/Cemu.exe
          zip -9 -r upload/cemu-${{ env.CEMU_VERSION }}-windows-x64.zip ${{ env.CEMU_FOLDER_NAME }}
          rm -r ./${{ env.CEMU_FOLDER_NAME }}

      - name: Create appimage
        run: |
          VERSION=${{ env.CEMU_VERSION }}
          echo "Cemu Version is $VERSION"
          ls cemu-appimage-x64
          mv cemu-appimage-x64/Cemu-*-x86_64.AppImage upload/Cemu-$VERSION-x86_64.AppImage
        
      - name: Create release from linux-bin
        run: |
          ls ./
          ls ./bin/
          cp -R ./bin ./${{ env.CEMU_FOLDER_NAME }}
          mv cemu-bin-linux-x64/Cemu ./${{ env.CEMU_FOLDER_NAME }}/Cemu
          zip -9 -r upload/cemu-${{ env.CEMU_VERSION }}-ubuntu-22.04-x64.zip ${{ env.CEMU_FOLDER_NAME }}
          rm -r ./${{ env.CEMU_FOLDER_NAME }}
          
      - name: Create release from macos-bin
        run: cp cemu-bin-macos-x64/Cemu.dmg upload/cemu-${{ env.CEMU_VERSION }}-macos-12-x64.dmg

      - name: Create release
        run: |
          wget -O ghr.tar.gz https://github.com/tcnksm/ghr/releases/download/v0.15.0/ghr_v0.15.0_linux_amd64.tar.gz
          tar xvzf ghr.tar.gz; rm ghr.tar.gz
          echo "[INFO] Release tag: v${{ env.CEMU_VERSION }}"
          CHANGELOG_UNESCAPED=$(printf "%s\n" "${{ env.RELEASE_BODY }}" | sed 's/\\n/\n/g')          
          RELEASE_BODY=$(printf "%s\n%s" \
            "**Changelog:**" \
            "$CHANGELOG_UNESCAPED")
          ghr_v0.15.0_linux_amd64/ghr -draft -t ${{ secrets.GITHUB_TOKEN }} -n "Cemu ${{ env.CEMU_VERSION }}" -b "$RELEASE_BODY" "v${{ env.CEMU_VERSION }}" ./upload
