name: Revert PR

on:
  pull_request_target:
    types: [labeled]

jobs:
  revert:
    name: Revert PR
    runs-on: ubuntu-latest
    if: github.event.label.name == 'revert_wf'
    steps:
      - name: Handle Not Merged PR
        if: github.event.pull_request.merged != true
        env:
          GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
        run: |
          gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "Only merged pull requests can be reverted."
          gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "revert_wf"
          exit 0

      - name: Find Reason for Revert
        if: github.event.pull_request.merged == true
        id: find-reason
        env:
          GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
        run: |
          REASON=$(gh pr view ${{ github.event.pull_request.number }} -R ${{ github.repository }} --json comments \
            --jq '.comments[] | .body | select(startswith("Reason for revert:")) | sub("^Reason for revert:\\s*"; "")' | head -n 1)

          if [ -z "$REASON" ]; then
            gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "A reason for requesting a revert of ${{ github.repository }}/${{ github.event.pull_request.number }} could not be found or the reason was not properly formatted. Begin a comment with **'Reason for revert:'** to tell the bot why this issue is being reverted."
            gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "revert_wf"
            echo "found=false" >> $GITHUB_OUTPUT
            exit 1
          else
            echo "REASON=$REASON" >> $GITHUB_ENV
            echo "found=true" >> $GITHUB_OUTPUT
          fi

      - name: Get PR Details
        if: steps.find-reason.outputs.found == 'true'
        env:
          GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
          ORIGINAL_AUTHOR: ${{ github.event.pull_request.user.login }}
          MERGE_COMMIT: ${{ github.event.pull_request.merge_commit_sha }}
        run: |
          REVIEWER=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews \
            --jq '[.[] | select(.state == "APPROVED")] | .[0].user.login')

          echo "MERGE_COMMIT=$MERGE_COMMIT" >> $GITHUB_ENV
          echo "ORIGINAL_AUTHOR=$ORIGINAL_AUTHOR" >> $GITHUB_ENV
          echo "REVIEWER=$REVIEWER" >> $GITHUB_ENV

          gh pr view ${{ github.event.pull_request.number }} -R ${{ github.repository }} --json body --jq '.body' > original_pr_body.txt

      - name: Checkout Fork
        if: steps.find-reason.outputs.found == 'true'
        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
        with:
          repository: flutteractionsbot/flutter
          path: flutter
          ref: master
          token: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
          fetch-depth: 0

      - name: Prepare Git
        if: steps.find-reason.outputs.found == 'true'
        working-directory: ./flutter
        run: |
          git config user.name "flutteractionsbot"
          git config user.email "<flutter-actions-bot@google.com>"
          git remote add upstream https://github.com/flutter/flutter.git
          git fetch upstream master

          BRANCH_NAME="revert-${{ github.event.pull_request.number }}-$(date +%s)"
          echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV

          git checkout -b $BRANCH_NAME upstream/master

      - name: Revert Commit
        if: steps.find-reason.outputs.found == 'true'
        id: revert-commit
        working-directory: ./flutter
        env:
          PR_NUMBER: ${{ github.event.pull_request.number }}
        run: |
          if git revert $MERGE_COMMIT --no-edit; then
            echo "success=true" >> $GITHUB_OUTPUT
          else
            echo "success=false" >> $GITHUB_OUTPUT
            gh pr comment $PR_NUMBER -R flutter/flutter -b "Failed to revert commit $MERGE_COMMIT cleanly. Please resolve conflicts manually."
            gh pr edit $PR_NUMBER -R ${{ github.repository }} --remove-label "revert_wf"
            exit 1
          fi

      - name: Push and Create PR
        if: steps.revert-commit.outputs.success == 'true'
        working-directory: ./flutter
        env:
          GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
          PR_TITLE: ${{ github.event.pull_request.title }}
          INITIATOR: ${{ github.event.sender.login }}
        run: |
          git push origin $BRANCH_NAME

          PR_LINK="https://github.com/flutter/flutter/pull/${{ github.event.pull_request.number }}"

          echo "Reverts: [$PR_TITLE]($PR_LINK)" > ../pr_body.txt
          echo "" >> ../pr_body.txt
          echo "Initiated by: @$INITIATOR" >> ../pr_body.txt
          echo "" >> ../pr_body.txt
          echo "Reason for reverting: $REASON" >> ../pr_body.txt
          echo "" >> ../pr_body.txt
          echo "Original PR Author: @$ORIGINAL_AUTHOR" >> ../pr_body.txt
          echo "" >> ../pr_body.txt
          echo "Reviewed By: @$REVIEWER" >> ../pr_body.txt
          echo "" >> ../pr_body.txt
          echo "The original PR description is provided below:" >> ../pr_body.txt
          echo "" >> ../pr_body.txt
          cat ../original_pr_body.txt >> ../pr_body.txt

          NEW_PR_URL=$(gh pr create \
            --title "Revert \"${PR_TITLE}\"" \
            --body-file ../pr_body.txt \
            --repo flutter/flutter \
            --base master \
            --head flutteractionsbot:$BRANCH_NAME)

          gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "Successfully created revert PR: $NEW_PR_URL"
          gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "revert_wf"
