Public/AutoStart.ps1

# ---------------------------------------------------------------------------
# Auto-start / Auto-reload
# ---------------------------------------------------------------------------

function Install-TTAutoStart {
    <#
    .SYNOPSIS
        Register TerminalTracker to start with Windows via Task Scheduler.
    .DESCRIPTION
        Creates a scheduled task that runs at logon to start the monitor,
        resume suspended sessions, and begin tracking. Falls back to a startup
        folder shortcut if Task Scheduler registration fails.
    .EXAMPLE
        Install-TTAutoStart
        Registers TerminalTracker to start automatically at Windows logon.
    #>

    [CmdletBinding()]
    param()
    $taskName = 'TerminalTracker-AutoStart'
    $modulePath = Join-Path (Split-Path $PSScriptRoot -Parent) 'TerminalTracker.psd1'

    $command = "Import-Module '$modulePath' -Force -DisableNameChecking; if ((Get-TTConfig).AutoReload) { Resume-TTSession -All }; Start-TTTray"

    $action = New-ScheduledTaskAction -Execute 'pwsh.exe' -Argument "-WindowStyle Hidden -NoProfile -Command `"$command`""
    $trigger = New-ScheduledTaskTrigger -AtLogOn -User $env:USERNAME
    $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable

    try {
        $existing = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
        if ($existing) {
            Set-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings | Out-Null
        }
        else {
            Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Settings $settings -Description 'TerminalTracker session monitor and auto-reload' | Out-Null
        }
        Write-Verbose "Auto-start registered: $taskName"

        # Update config
        $cfg = Get-TTConfig
        $cfg.AutoStart = $true
        Write-JsonFile $script:ConfigFile $cfg
    }
    catch {
        Write-Warning "Failed to register scheduled task: $_"
        Write-Warning "Try running as administrator, or use the startup folder method instead."
        Install-TTAutoStartViaStartup
    }
}

function Install-TTAutoStartViaStartup {
    <#
    .SYNOPSIS Fallback: add a shortcut to the Startup folder.
    #>

    [CmdletBinding()]
    param()
    $startupDir = [Environment]::GetFolderPath('Startup')
    $shortcutPath = Join-Path $startupDir 'TerminalTracker.lnk'
    $modulePath = Join-Path (Split-Path $PSScriptRoot -Parent) 'TerminalTracker.psd1'
    $command = "Import-Module '$modulePath' -Force -DisableNameChecking; if ((Get-TTConfig).AutoReload) { Resume-TTSession -All }; Start-TTTray"

    $shell = New-Object -ComObject WScript.Shell
    $shortcut = $shell.CreateShortcut($shortcutPath)
    $shortcut.TargetPath = 'pwsh.exe'
    $shortcut.Arguments = "-WindowStyle Hidden -NoProfile -Command `"$command`""
    $shortcut.WindowStyle = 7  # Minimized
    $shortcut.Description = 'TerminalTracker auto-start'
    $shortcut.Save()

    Write-Verbose "Startup shortcut created at: $shortcutPath"
}

function Remove-TTAutoStart {
    <#
    .SYNOPSIS
        Remove TerminalTracker from Windows auto-start.
    .DESCRIPTION
        Removes the scheduled task and startup folder shortcut used for
        auto-starting TerminalTracker at Windows logon.
    .EXAMPLE
        Remove-TTAutoStart
        Removes TerminalTracker from Windows auto-start.
    #>

    [CmdletBinding(SupportsShouldProcess)]
    param()
    # Remove scheduled task
    $taskName = 'TerminalTracker-AutoStart'
    try {
        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction Stop
        Write-Verbose "Scheduled task '$taskName' removed."
    }
    catch {
        Write-Verbose "No scheduled task found (or access denied)."
    }

    # Remove startup shortcut if present
    $startupDir = [Environment]::GetFolderPath('Startup')
    $shortcutPath = Join-Path $startupDir 'TerminalTracker.lnk'
    if (Test-Path $shortcutPath) {
        Remove-Item $shortcutPath -Force
        Write-Verbose "Startup shortcut removed."
    }

    # Update config
    $cfg = Get-TTConfig
    $cfg.AutoStart = $false
    Write-JsonFile $script:ConfigFile $cfg
}