Private/ArchiveHelper.ps1

# ---------------------------------------------------------------------------
# Archive helper - internal entry creation with rolling limits
# ---------------------------------------------------------------------------

function Add-TTArchiveEntry {
    param($Session, [string]$Reason = 'closed')
    $archive = @(Read-JsonFile $script:ArchiveFile)
    $entry = $Session.PSObject.Copy()
    $entry | Add-Member -NotePropertyName ClosedTime -NotePropertyValue ([datetime]::UtcNow.ToString('o')) -Force
    $entry | Add-Member -NotePropertyName CloseReason -NotePropertyValue $Reason -Force
    $archive = @($archive) + @($entry)

    # Enforce rolling limits
    $cfg = Get-TTConfig
    $cutoff = [datetime]::UtcNow.AddDays(-$cfg.ArchiveRetentionDays).ToString('o')
    $archive = @($archive | Where-Object { $_.ClosedTime -gt $cutoff })
    if ($archive.Count -gt $cfg.MaxArchiveEntries) {
        $archive = $archive[-$cfg.MaxArchiveEntries..-1]
    }

    Write-JsonFile $script:ArchiveFile $archive
}