Public/Config.ps1

# ---------------------------------------------------------------------------
# Configuration
# ---------------------------------------------------------------------------

function Get-TTConfig {
    <#
    .SYNOPSIS
        Get current TerminalTracker configuration.
    .DESCRIPTION
        Returns the current TerminalTracker configuration object with all settings
        including archive retention, monitor interval, auto-start, and sync path.
    .EXAMPLE
        Get-TTConfig
        Returns the full configuration object.
    .EXAMPLE
        (Get-TTConfig).MonitorIntervalSeconds
        Returns just the monitor polling interval.
    #>

    [CmdletBinding()]
    param()
    Initialize-TTDataStore
    Read-JsonFile $script:ConfigFile
}

function Set-TTConfig {
    <#
    .SYNOPSIS
        Update TerminalTracker configuration values.
    .DESCRIPTION
        Modifies one or more TerminalTracker configuration settings. Changes are
        persisted immediately to the config file. Only specified parameters are updated;
        unspecified settings remain unchanged.
    .PARAMETER ArchiveRetentionDays
        Rolling archive retention in days.
    .PARAMETER MaxArchiveEntries
        Maximum archived session entries.
    .PARAMETER MonitorIntervalSeconds
        Seconds between monitor polls.
    .PARAMETER AutoStart
        Enable/disable auto-start with Windows.
    .PARAMETER AutoReload
        Enable/disable auto-reload of suspended sessions on startup.
    .PARAMETER SyncPath
        Path to sync session data (e.g. OneDrive/Dropbox folder).
    .EXAMPLE
        Set-TTConfig -MonitorIntervalSeconds 30
        Sets the monitor polling interval to 30 seconds.
    .EXAMPLE
        Set-TTConfig -AutoStart $true -AutoReload $true
        Enables both auto-start and auto-reload of suspended sessions.
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [int]$ArchiveRetentionDays,
        [int]$MaxArchiveEntries,
        [int]$MonitorIntervalSeconds,
        [Nullable[bool]]$AutoStart,
        [Nullable[bool]]$AutoReload,
        [string]$SyncPath
    )
    Initialize-TTDataStore
    if (-not $PSCmdlet.ShouldProcess("TerminalTracker configuration", "Update")) { return }
    $cfg = Get-TTConfig

    if ($PSBoundParameters.ContainsKey('ArchiveRetentionDays')) { $cfg.ArchiveRetentionDays = $ArchiveRetentionDays }
    if ($PSBoundParameters.ContainsKey('MaxArchiveEntries'))    { $cfg.MaxArchiveEntries = $MaxArchiveEntries }
    if ($PSBoundParameters.ContainsKey('MonitorIntervalSeconds')) { $cfg.MonitorIntervalSeconds = $MonitorIntervalSeconds }
    if ($PSBoundParameters.ContainsKey('AutoStart'))   { $cfg.AutoStart = $AutoStart }
    if ($PSBoundParameters.ContainsKey('AutoReload'))   { $cfg.AutoReload = $AutoReload }
    if ($PSBoundParameters.ContainsKey('SyncPath'))     { $cfg.SyncPath = $SyncPath }

    Write-JsonFile $script:ConfigFile $cfg

    if ($PSBoundParameters.ContainsKey('AutoStart')) {
        if ($AutoStart) { Install-TTAutoStart } else { Remove-TTAutoStart }
    }

    $cfg
}