Public/Archive.ps1

# ---------------------------------------------------------------------------
# Archive - view and manage closed session history
# ---------------------------------------------------------------------------

function Get-TTArchive {
    <#
    .SYNOPSIS
        View archived (closed) sessions.
    .DESCRIPTION
        Returns archived session records for terminals that have been closed,
        suspended, or manually removed. Supports filtering by count and directory.
    .PARAMETER Last
        Show only the last N entries (default: 50).
    .PARAMETER Directory
        Filter by directory pattern (wildcard match).
    .EXAMPLE
        Get-TTArchive
        Returns the last 50 archived sessions.
    .EXAMPLE
        Get-TTArchive -Last 10
        Returns the 10 most recent archived sessions.
    .EXAMPLE
        Get-TTArchive -Directory 'my-project'
        Returns archived sessions whose directory contains 'my-project'.
    #>

    [CmdletBinding()]
    param(
        [int]$Last = 50,
        [string]$Directory
    )
    Initialize-TTDataStore
    $archive = @(Read-JsonFile $script:ArchiveFile)
    if ($Directory) {
        $archive = $archive | Where-Object { $_.WorkingDirectory -like "*$Directory*" }
    }
    if ($archive.Count -gt $Last) {
        $archive = $archive[-$Last..-1]
    }
    $archive
}

function Clear-TTArchive {
    <#
    .SYNOPSIS
        Clear archived sessions.
    .DESCRIPTION
        Removes archived session records. Can clear all entries or only those
        older than a specified number of days.
    .PARAMETER OlderThanDays
        Remove entries older than N days. If omitted, clears all entries.
    .EXAMPLE
        Clear-TTArchive
        Clears all archived sessions.
    .EXAMPLE
        Clear-TTArchive -OlderThanDays 7
        Clears archived sessions older than 7 days.
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [int]$OlderThanDays
    )
    Initialize-TTDataStore
    if ($OlderThanDays) {
        $cutoff = [datetime]::UtcNow.AddDays(-$OlderThanDays).ToString('o')
        $archive = @(Read-JsonFile $script:ArchiveFile)
        $archive = @($archive | Where-Object { $_.ClosedTime -gt $cutoff })
        if ($PSCmdlet.ShouldProcess("Archive entries older than $OlderThanDays days", "Clear")) {
            Write-JsonFile $script:ArchiveFile $archive
        }
    }
    else {
        if ($PSCmdlet.ShouldProcess("All archive entries", "Clear")) {
            Write-JsonFile $script:ArchiveFile @()
        }
    }
}