name: i18n PR auto-merge

on:
  pull_request:
    types: [opened, synchronize, reopened, labeled]
    branches:
      - main

jobs:
  run-and-merge:
    if: contains(github.event.pull_request.labels.*.name, 'i18n') &&
      github.event.pull_request.base.ref == 'main' &&
      github.event.pull_request.head.ref == 'l10n_main'
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - run: sleep 15

      - name: Check if the branch is dirty
        run: |
          git fetch origin ${{ github.event.pull_request.head.ref }}
          if [ $(git rev-parse HEAD) != $(git rev-parse origin/${{ github.event.pull_request.head.ref }}) ]; then
            echo "Branch is dirty. Exiting..."
            exit 0
          fi

      - name: Check auto-merge conditions
        run: |
          BASE_SHA="${{ github.event.pull_request.base.sha }}"
          HEAD_SHA="${{ github.event.pull_request.head.sha }}"

          # Debug: Show the base and head SHA
          echo "Base SHA: $BASE_SHA"
          echo "Head SHA: $HEAD_SHA"

          # Check if the commits exist
          if ! git cat-file -e $BASE_SHA || ! git cat-file -e $HEAD_SHA; then
            echo "ERROR: One or both of the commits are not available."
            exit 1
          fi

          # Calculate the total number of lines changed (added, removed, or modified)
          LINES_CHANGED=$(git diff --shortstat $BASE_SHA $HEAD_SHA | awk '{print $4 + $6 + $8}')

          if [ -z "$LINES_CHANGED" ]; then
            LINES_CHANGED=0
          fi

          echo "Total lines changed: $LINES_CHANGED"

          # Check if the number of lines changed is more than 50
          if [ "$LINES_CHANGED" -le 50 ]; then
            exit 0
          else
            echo "More than 50 lines have been changed. Merging pull request."

            # List of locales changed
            LOCALES_CHANGED=$(git diff --name-only $BASE_SHA $HEAD_SHA | grep '\.po$' | awk -F '/' '{print $NF}' | sed 's/\.po$//' | tr '\n' ',' | sed 's/,$//')

            # Better subject
            # "i18n updates ([LOCALES_CHANGED])"
            PR_NUMBER=$(echo ${{ github.event.pull_request.number }})
            SUBJECT="i18n updates ($LOCALES_CHANGED) (#$PR_NUMBER)"

            gh pr merge $PR_NUMBER --squash --subject "$SUBJECT" || true
          fi
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}