name: Label PRs by Type of Change

on:
  pull_request_target:
    types: [opened, edited, synchronize]

jobs:
  label-pr:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      issues: write
      contents: read  # Often needed for github-script
    steps:
      - name: Check PR body for Type of Change
        uses: actions/github-script@v8
        with:
          script: |
            const prBody = context.payload.pull_request.body || '';
            const labelsToAdd = [];

            if (/\[x\]\s*New feature/i.test(prBody)) {
              labelsToAdd.push('new feature');
            }
            if (/\[x\]\s*Bug fix/i.test(prBody)) {
              labelsToAdd.push('bug');
            }
            if (/\[x\]\s*Documentation update/i.test(prBody)) {
              labelsToAdd.push('documentation');
            }
            if (/\[x\]\s*Hotfix/i.test(prBody)) {
              labelsToAdd.push('hotfix');
            }
            if (/\[x\]\s*UI\/UX improvement/i.test(prBody)) {
              labelsToAdd.push('ui update');
            }

            if (labelsToAdd.length > 0) {
              await github.rest.issues.addLabels({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: context.payload.pull_request.number,
                labels: labelsToAdd
              });
            }
