name: Greetings

on:
  pull_request_target:
    types: [opened]
  issues:
    types: [opened]

permissions:
  issues: write
  pull-requests: write

jobs:
  greeting:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    # Skip for bots and repository owner
    if: >-
      github.actor != 'dependabot[bot]' &&
      github.actor != 'renovate[bot]' &&
      github.actor != 'github-actions[bot]' &&
      github.actor != github.repository_owner
    steps:
    - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
        script: |
          const actor = context.actor;
          const repo = context.repo;
          
          // Check if this is a PR or Issue event
          const isPullRequest = context.payload.pull_request !== undefined;
          const isIssue = context.payload.issue !== undefined;
          
          if (!isPullRequest && !isIssue) {
            console.log('Not a PR or Issue event, skipping.');
            return;
          }
          
          // For PRs: Only check PR history (don't check issues - that's the bug in first-interaction)
          // For Issues: Only check issue history (don't check PRs)
          let isFirstContribution = false;
          
          if (isPullRequest) {
            // Search for previous PRs by this user
            const { data: prs } = await github.rest.pulls.list({
              owner: repo.owner,
              repo: repo.repo,
              state: 'all',
              per_page: 100
            });
            
            // Count PRs by this user (excluding the current one)
            const userPrs = prs.filter(pr => 
              pr.user.login === actor && 
              pr.number !== context.payload.pull_request.number
            );
            
            isFirstContribution = userPrs.length === 0;
            console.log(`Found ${userPrs.length} previous PRs by ${actor}`);
            
            if (isFirstContribution) {
              const message = '👋 Thanks for your first Pull Request! We love contributions. Please ensure you have signed off your commits and followed the contribution guidelines.';
              await github.rest.issues.createComment({
                owner: repo.owner,
                repo: repo.repo,
                issue_number: context.payload.pull_request.number,
                body: message
              });
              console.log(`Posted first PR greeting for ${actor}`);
            } else {
              console.log(`${actor} is not a first-time PR contributor, skipping greeting.`);
            }
          }
          
          if (isIssue) {
            // Search for previous issues by this user
            const { data: issues } = await github.rest.issues.listForRepo({
              owner: repo.owner,
              repo: repo.repo,
              state: 'all',
              per_page: 100
            });
            
            // Count issues by this user (excluding the current one and PRs)
            const userIssues = issues.filter(issue => 
              issue.user.login === actor && 
              !issue.pull_request && // Exclude PRs from the issues list
              issue.number !== context.payload.issue.number
            );
            
            isFirstContribution = userIssues.length === 0;
            console.log(`Found ${userIssues.length} previous issues by ${actor}`);
            
            if (isFirstContribution) {
              const message = "👋 Thanks for opening this issue! We appreciate your feedback and report. A maintainer will check this out soon.";
              await github.rest.issues.createComment({
                owner: repo.owner,
                repo: repo.repo,
                issue_number: context.payload.issue.number,
                body: message
              });
              console.log(`Posted first issue greeting for ${actor}`);
            } else {
              console.log(`${actor} is not a first-time issue contributor, skipping greeting.`);
            }
          }
