name: Create PR

on:
  push:
    branches-ignore:
      - main

jobs:
  create_and_enable_automerge:
    runs-on: ubuntu-latest
    if: github.actor != 'dependabot[bot]' && github.actor != 'renovate[bot]'
    steps:
      - name: Generate hs-bot-gh-ap installation token
        id: app-token
        uses: actions/create-github-app-token@v1
        with:
          app-id: ${{ secrets.HS_BOT_GH_AP_APP_ID }}
          private-key: ${{ secrets.HS_BOT_GH_AP_PRIVATE_KEY }}

      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Set branch name as output
        id: branch_name
        run: echo "branch=${GITHUB_REF#refs/heads/}" >> "$GITHUB_OUTPUT"

      - name: Check if PR already exists
        id: check_pr
        run: |
          EXISTING_PR=$(gh pr list --head "${{ steps.branch_name.outputs.branch }}" --base main --json number --jq '.[0].number // empty')
          echo "existing_pr=$EXISTING_PR" >> "$GITHUB_OUTPUT"
        env:
          GH_TOKEN: ${{ steps.app-token.outputs.token }}

      - name: Create Pull Request
        id: create_pr
        if: steps.check_pr.outputs.existing_pr == ''
        uses: repo-sync/pull-request@v2
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          destination_branch: 'main'
          source_branch: ''
          pr_title: '${{ steps.branch_name.outputs.branch }}'
          pr_body: |
            :magic_wand: :sparkles:

          pr_draft: false

      - name: Resolve PR number
        id: resolve_pr
        run: |
          PR_NUMBER="${{ steps.create_pr.outputs.pr_number }}"
          if [ -z "$PR_NUMBER" ]; then
            PR_NUMBER="${{ steps.check_pr.outputs.existing_pr }}"
          fi
          echo "pr_number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
        env:
          GH_TOKEN: ${{ steps.app-token.outputs.token }}

      - name: Assign PR to author
        if: steps.resolve_pr.outputs.pr_number
        run: |
          curl -s -X POST \
            -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            -H "Accept: application/vnd.github.v3+json" \
            -d '{"assignees":["${{ github.actor }}"]}' \
            "https://api.github.com/repos/${{ github.repository }}/issues/${{ steps.resolve_pr.outputs.pr_number }}/assignees"

      - name: Get PR Node ID
        if: steps.resolve_pr.outputs.pr_number
        id: get_pr_id
        run: |
          PR_DATA=$(curl -s -H "Authorization: token ${{ steps.app-token.outputs.token }}" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/pulls/${{ steps.resolve_pr.outputs.pr_number }}")
          PR_ID=$(echo "$PR_DATA" | jq -r '.node_id')
          echo "node_id=$PR_ID" >> "$GITHUB_OUTPUT"

      - name: Enable Auto Merge for PR
        if: steps.resolve_pr.outputs.pr_number
        run: |
          RESPONSE=$(curl -s -X POST \
            -H "Authorization: bearer ${{ steps.app-token.outputs.token }}" \
            -H "Content-Type: application/json" \
            -d '{
              "query": "mutation($id: ID!) { enablePullRequestAutoMerge(input: { pullRequestId: $id }) { clientMutationId } }",
              "variables": {
                "id": "'"${{ steps.get_pr_id.outputs.node_id }}"'"
              }
            }' \
            "https://api.github.com/graphql")
          echo "$RESPONSE"
          if echo "$RESPONSE" | jq -e '.errors' >/dev/null; then
            echo "Failed to enable auto merge"
            exit 1
          fi
