name: Build APK and Notify Discord

on:
  push:
    branches:
      - dev
    paths-ignore:
      - '**/README.md'

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      CI: true

    steps:
    - name: Checkout repo
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

        
    - name: Download last SHA artifact
      uses: dawidd6/action-download-artifact@v6
      with:
        workflow: beta.yml
        name: last-sha
        path: .
      
      continue-on-error: true

    - name: Get Commits Since Last Run
      run: |
        if [ -f last_sha.txt ]; then
          LAST_SHA=$(cat last_sha.txt)
        else
          # Fallback to first commit if no previous SHA available
          LAST_SHA=$(git rev-list --max-parents=0 HEAD)
        fi
        echo "Commits since $LAST_SHA:"
        # Accumulate commit logs in a shell variable
        COMMIT_LOGS=$(git log $LAST_SHA..HEAD --pretty=format:"● %s ~%an")
        # URL-encode the newline characters for GitHub Actions
        COMMIT_LOGS="${COMMIT_LOGS//'%'/'%25'}"
        COMMIT_LOGS="${COMMIT_LOGS//$'\n'/'%0A'}"
        COMMIT_LOGS="${COMMIT_LOGS//$'\r'/'%0D'}"
        # Append the encoded commit logs to the COMMIT_LOG environment variable
        echo "COMMIT_LOG=${COMMIT_LOGS}" >> $GITHUB_ENV
        # Debugging: Print the variable to check its content
        echo "$COMMIT_LOGS"
        echo "$COMMIT_LOGS" > commit_log.txt
      shell: /usr/bin/bash -e {0}
      env:
        CI: true
      continue-on-error: true

    - name: Save Current SHA for Next Run
      run: echo ${{ github.sha }} > last_sha.txt

    - name: Set variables
      run: |
        VER=$(grep -E -o "versionName \".*\"" app/build.gradle | sed -e 's/versionName //g' | tr -d '"')
        SHA=${{ github.sha }}
        VERSION="$VER+${SHA:0:7}"
        echo "Version $VERSION"
        echo "VERSION=$VERSION" >> $GITHUB_ENV

    - name: Setup JDK 17
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 17
        cache: gradle
  
    - name: Decode Keystore File
      run: echo "${{ secrets.KEYSTORE_FILE }}" | base64 -d > $GITHUB_WORKSPACE/key.keystore
  
    - name: List files in the directory
      run: ls -l
      
    - name: Make gradlew executable
      run: chmod +x ./gradlew
  
    - name: Build with Gradle
      run: ./gradlew assembleGoogleAlpha -Pandroid.injected.signing.store.file=$GITHUB_WORKSPACE/key.keystore -Pandroid.injected.signing.store.password=${{ secrets.KEYSTORE_PASSWORD }} -Pandroid.injected.signing.key.alias=${{ secrets.KEY_ALIAS }} -Pandroid.injected.signing.key.password=${{ secrets.KEY_PASSWORD }}

    - name: Upload a Build Artifact
      uses: actions/upload-artifact@v4
      with:
          name: Dantotsu
          retention-days: 5
          compression-level: 9
          path: "app/build/outputs/apk/google/alpha/app-google-alpha.apk"
            
    - name: Upload APK to Discord and Telegram
      if: ${{ github.repository == 'rebelonion/Dantotsu' }}
      shell: bash
      run: |
        #Discord
        commit_messages=$(echo "$COMMIT_LOG" | sed 's/%0A/\n/g; s/^/\n/')
        #  Truncate commit messages if they are too long
        max_length=1900 # Adjust this value as needed
        if [ ${#commit_messages} -gt $max_length ]; then
          commit_messages="${commit_messages:0:$max_length}... (truncated)"
        fi
        contentbody=$( jq -nc --arg msg "Alpha-Build: <@&1225347048321191996> **$VERSION**:" --arg commits "$commit_messages" '{"content": ($msg + "\n" + $commits)}' )
        curl -F "payload_json=${contentbody}" -F "dantotsu_debug=@app/build/outputs/apk/google/alpha/app-google-alpha.apk" ${{ secrets.DISCORD_WEBHOOK }}
        
        #Telegram
        curl -F "chat_id=${{ secrets.TELEGRAM_CHANNEL_ID }}" \
          -F "document=@app/build/outputs/apk/google/alpha/app-google-universal-alpha.apk" \
          -F "caption=Alpha-Build: ${VERSION}: ${commit_messages}" \
         https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendDocument

      env:
        COMMIT_LOG: ${{ env.COMMIT_LOG }}
        VERSION: ${{ env.VERSION }}

    - name: Upload Current SHA as Artifact
      uses: actions/upload-artifact@v4
      with:
        name: last-sha
        path: last_sha.txt

    - name: Upload Commit log as Artifact
      uses: actions/upload-artifact@v4
      with:
        name: commit-log
        path: commit_log.txt
