name: Google Play Upload

on:
  workflow_call:
    inputs:
      notes:
        description: "Google Play release notes"
        required: false
        type: string
      track:
        description: "Google Play track (internal, alpha, beta, production)"
        required: false
        default: "internal"
        type: string
    secrets:
      GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64:
        required: false

permissions:
  contents: read

jobs:
  upload:
    name: Upload Android AAB to Google Play
    runs-on: ubuntu-latest
    timeout-minutes: 30

    steps:
      - name: Check Google Play credentials
        id: check_prereqs
        env:
          GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64 }}
        run: |
          set -eu

          missing=()
          if [ -z "${GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64-}" ]; then
            missing+=("GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64")
          fi

          if [ "${#missing[@]}" -eq 0 ]; then
            echo "enabled=true" >> "$GITHUB_OUTPUT"
            exit 0
          fi

          echo "enabled=false" >> "$GITHUB_OUTPUT"
          {
            echo "Missing required Google Play secrets:"
            printf " - %s\n" "${missing[@]}"
          } >> "$GITHUB_STEP_SUMMARY"

      - name: Skip Google Play upload
        if: ${{ steps.check_prereqs.outputs.enabled != 'true' }}
        run: |
          echo "Skipping Google Play upload because required credentials are not configured."

      - name: Download Android AAB artifact
        if: ${{ steps.check_prereqs.outputs.enabled == 'true' }}
        uses: actions/download-artifact@v4.3.0
        with:
          name: app-release-aab
          path: ${{ runner.temp }}/android-aab

      - name: Prepare Google Play credentials
        id: play_creds
        if: ${{ steps.check_prereqs.outputs.enabled == 'true' }}
        env:
          GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64 }}
        run: |
          set -euo pipefail
          CREDENTIALS_PATH="$RUNNER_TEMP/google-play-service-account.json"
          echo "$GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64" | base64 --decode > "$CREDENTIALS_PATH"
          echo "credentials-path=$CREDENTIALS_PATH" >> "$GITHUB_OUTPUT"

      - name: Resolve AAB path
        id: aab
        if: ${{ steps.check_prereqs.outputs.enabled == 'true' }}
        run: |
          set -euo pipefail
          AAB_PATH="$(find "${{ runner.temp }}/android-aab" -name '*.aab' | head -n 1)"
          if [ -z "$AAB_PATH" ]; then
            echo "::error::No Android App Bundle (.aab) found in downloaded artifacts"
            exit 1
          fi
          echo "aab-path=$AAB_PATH" >> "$GITHUB_OUTPUT"

      - name: Create release notes file
        id: notes
        if: ${{ steps.check_prereqs.outputs.enabled == 'true' && inputs.notes != '' }}
        env:
          NOTES: ${{ inputs.notes }}
        run: |
          set -euo pipefail
          NOTES_DIR="$RUNNER_TEMP/google-play-whatsnew"
          mkdir -p "$NOTES_DIR"
          printf '%s\n' "$NOTES" > "$NOTES_DIR/whatsnew-en-US"
          echo "notes-dir=$NOTES_DIR" >> "$GITHUB_OUTPUT"

      - name: Upload to Google Play
        if: ${{ steps.check_prereqs.outputs.enabled == 'true' }}
        uses: r0adkll/upload-google-play@v1
        with:
          serviceAccountJson: ${{ steps.play_creds.outputs.credentials-path }}
          packageName: am.sure.mobile
          releaseFiles: ${{ steps.aab.outputs.aab-path }}
          tracks: ${{ inputs.track }}
          status: completed
          whatsNewDirectory: ${{ steps.notes.outputs.notes-dir }}
