scripts/win/jira/latest.ps1

param (
    [string[]]$extraArgs
)

. "$env:BORG_ROOT\config\globalfn.ps1"

# Auth header
$authHeader = @{
    Authorization = "Basic " + [Convert]::ToBase64String(
        [Text.Encoding]::ASCII.GetBytes("${jiraEmail}:${jiraAPIToken}")
    )
    Accept        = "application/json"
}

# How many days to scan
[int]$Days = 7
if ($extraArgs.Count -gt 0 -and $extraArgs[0] -as [int]) {
    $Days = [int]$extraArgs[0]
}

Write-Host "`n🔍 Debug: jiraEmail = $jiraEmail"
Write-Host "`n🔍 Debug: jiraDisplayName = $jiraDisplayName"
Write-Host "🧠 Scanning updated issues for mentions or assignments in the last $Days days..." -ForegroundColor Cyan

# Get current user's accountId
$meUrl = "$jiraDomain/rest/api/2/myself"
$me = Invoke-RestMethod -Uri $meUrl -Headers $authHeader
$accountId = $me.accountId

# JQL query & fetch
$jql = "updated >= -${Days}d"
$url = "$jiraDomain/rest/api/2/search?jql=$([uri]::EscapeDataString($jql))&maxResults=100&fields=key,summary,status,assignee,updated"
$response = Invoke-RestMethod -Uri $url -Headers $authHeader

# Store relevant issues
$allIssues = @{}

foreach ($issue in $response.issues) {
    $key = $issue.key
    $summary = $issue.fields.summary
    $reason = @()
    $assignedToMe = $issue.fields.assignee?.accountId -eq $accountId

    if ($assignedToMe) {
        $reason += "👤 Assigned"
    }

    # Check for comment mentions
    $commentUrl = "$jiraDomain/rest/api/2/issue/$key/comment"
    try {
        $comments = (Invoke-RestMethod -Uri $commentUrl -Headers $authHeader).comments
        foreach ($comment in $comments) {
            if ($comment.body -match [regex]::Escape($jiraDisplayName)) {
                $reason += "💬 Mentioned"
                break
            }
        }
    }
    catch {
        Write-Warning "❌ Failed to fetch comments for ${key}: $_"
    }

    if ($reason.Count -gt 0) {
        $allIssues[$key] = @{
            issue  = $issue
            reason = ($reason -join " + ")
        }
    }
}

# Display results
Write-Host "`n📦 Total relevant issues: $($allIssues.Count)" -ForegroundColor Green

$sorted = $allIssues.Values | Sort-Object { $_.issue.fields.updated } -Descending

Write-Host ""
Write-Host "📋 Assigned or Mentioned Issues — Sorted by Last Update" -ForegroundColor Cyan
Write-Host "═════════════════════════════════════════════════════════════════════"

$rendered = $sorted | ForEach-Object {
    $i = $_.issue
    $reason = $_.reason
    $updated = (Get-Date $i.fields.updated).ToString("yyyy-MM-dd HH:mm")
    $status = $i.fields.status.name
    $summary = $i.fields.summary
    $key = $i.key

    @"
🔹 $key — $summary
    📅 Updated: $updated
    🏷️ Status : $status
    🔍 Reason : $reason
"@

}

# Join all as one text block
$finalText = $rendered -join "`n"

# Pipe to less for full paging control
$finalText | less