scripts/win/jira/workflow-today.ps1

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

# ---- Get your Jira accountId ----
$meUrl = "$jiraDomain/rest/api/2/myself"
$me = Invoke-RestMethod -Uri $meUrl -Headers $authHeader
$accountId = $me.accountId

Write-Host ""
Write-Host "Jira Worklog Summary — Today ($(Get-Date -Format 'yyyy-MM-dd'))" -ForegroundColor Magenta
Write-Host ""

# ---- Build JQL: assigned to me ----
$jql = "assignee = $accountId ORDER BY updated DESC"
$encodedJql = [uri]::EscapeDataString($jql)
$searchUrl = "$jiraDomain/rest/api/2/search?jql=$encodedJql&fields=key,summary&maxResults=50"
$response = Invoke-RestMethod -Uri $searchUrl -Headers $authHeader -Method Get

Write-Host "Request succeeded. Issues returned: $($response.issues.Count)" -ForegroundColor Cyan

# ---- Define today's date ----
$today = (Get-Date).ToString("yyyy-MM-dd")
$results = @()

# ---- Check each issue's worklog ----
foreach ($issue in $response.issues) {
    $issueKey = $issue.key
    $summary = $issue.fields.summary
    $worklogUrl = "$jiraDomain/rest/api/2/issue/$issueKey/worklog"

    try {
        $worklogs = Invoke-RestMethod -Uri $worklogUrl -Headers $authHeader -Method Get
    }
    catch {
        Write-Warning "Skipped $issueKey (no access or failed)."
        continue
    }

    foreach ($log in $worklogs.worklogs) {
        $logDate = ([datetime]::Parse($log.started)).ToString("yyyy-MM-dd")
        if ($log.author.accountId -eq $accountId -and $logDate -eq $today) {
            $results += [PSCustomObject]@{
                Issue   = $issueKey
                Time    = $log.timeSpent
                Seconds = $log.timeSpentSeconds
                Logged  = $log.started
                Summary = $summary
            }
        }
    }
}

# ---- Output results ----
if ($results.Count -eq 0) {
    Write-Host "No worklogs found for today." -ForegroundColor Yellow
}
else {
    $results | Sort-Object Logged | Format-Table -AutoSize

    $totalSeconds = ($results | Measure-Object -Property Seconds -Sum).Sum
    $totalMinutes = [math]::Floor($totalSeconds / 60)
    $totalHours = [math]::Floor($totalMinutes / 60)
    $remainingMinutes = $totalMinutes % 60

    Write-Host "`nTotal logged today: $totalMinutes minutes" -ForegroundColor Green
    Write-Host " That’s $totalHours hours $remainingMinutes minutes" -ForegroundColor DarkCyan
}