name: Close PRs with unchanged wrong base branch

on:
  schedule:
    - cron: '0 */6 * * *' # Every 6 hours

permissions:
  pull-requests: write
  issues: write

jobs:
  close-stale:
    runs-on: ubuntu-latest
    steps:
      - name: Close stale wrong-base-branch PRs
        uses: actions/github-script@v7
        with:
          script: |
            const { data: pulls } = await github.rest.pulls.list({
              owner: context.repo.owner,
              repo: context.repo.repo,
              state: 'open',
              per_page: 100,
            });

            const twentyFourHoursAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);

            for (const pull of pulls) {
              const hasLabel = pull.labels.some(l => l.name === 'wrong-base-branch');
              if (!hasLabel) continue;

              const createdAt = new Date(pull.created_at);
              if (createdAt > twentyFourHoursAgo) continue; // grace period not over yet

              // Base was fixed — remove label and move on
              if (pull.base.ref !== 'main') {
                await github.rest.issues.removeLabel({
                  owner: context.repo.owner,
                  repo: context.repo.repo,
                  issue_number: pull.number,
                  name: 'wrong-base-branch',
                });
                continue;
              }

              // Still targeting main after 24h — close it
              await github.rest.issues.createComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: pull.number,
                body: [
                  '## PR closed',
                  '',
                  'This PR has been automatically closed because the base branch was not updated to `dev` within 24 hours.',
                  '',
                  'Feel free to open a new PR targeting `dev`.',
                ].join('\n'),
              });

              await github.rest.pulls.update({
                owner: context.repo.owner,
                repo: context.repo.repo,
                pull_number: pull.number,
                state: 'closed',
              });
            }
