Public/Helpers/Get-UserAgentStatus.ps1

function Get-UserAgentStatus {
    [CmdletBinding()]
    param()

    # Get the actual current user agent that's in use via the getter function if rotation is enabled
    # This ensures we display the real user agent, not just the stored value
    $currentUserAgent = if ($script:SessionVariables.UserAgentRotationEnabled -and 
                            [string]::IsNullOrEmpty($script:SessionVariables.CustomUserAgent)) {
        # Get the current user agent without incrementing the counter
        (Get-CurrentUserAgent)
    } else {
        # If rotation is disabled or custom agent is set, use the stored value
        $script:SessionVariables.CurrentUserAgent
    }

    $status = [PSCustomObject]@{
        CurrentAgent = $currentUserAgent ?? "(Not Set)"
        LastChanged = $script:SessionVariables.UserAgentLastChanged ?? "(Not Set)"
        RequestCount = $script:SessionVariables.UserAgentRequestCount ?? 0
        RotationEnabled = $script:SessionVariables.UserAgentRotationEnabled ?? $true
        RotationInterval = $script:SessionVariables.UserAgentRotationInterval ?? [TimeSpan]::FromMinutes(30)
        MaxRequestsPerAgent = $script:SessionVariables.MaxRequestsPerAgent ?? 50
        CustomUserAgent = $script:SessionVariables.CustomUserAgent ?? "(Not Set)"
        NextRotationAt = if ($script:SessionVariables.UserAgentLastChanged -and $script:SessionVariables.UserAgentRotationEnabled) {
            $script:SessionVariables.UserAgentLastChanged + $script:SessionVariables.UserAgentRotationInterval
        } else { "(Not Set)" }
        RequestsUntilRotation = if ($script:SessionVariables.UserAgentRotationEnabled -and $script:SessionVariables.MaxRequestsPerAgent) {
            $script:SessionVariables.MaxRequestsPerAgent - ($script:SessionVariables.UserAgentRequestCount ?? 0)
        } else { "(Not Set)" }
    }

    # Format the output nicely
    Write-Output "📊 User Agent Status:"
    Write-Output " Current User Agent: $($status.CurrentAgent)"
    Write-Output " Last Changed: $($status.LastChanged)"
    Write-Output " Request Count: $($status.RequestCount)"
    Write-Output " Rotation Enabled: $($status.RotationEnabled)"
    Write-Output " Rotation Interval: $($status.RotationInterval)"
    Write-Output " Max Requests Per Agent: $($status.MaxRequestsPerAgent)"
    if ($status.CustomUserAgent -ne "(Not Set)") {
        Write-Output " Custom User Agent: $($status.CustomUserAgent)"
    }
    if ($status.RotationEnabled) {
        Write-Output " Next Rotation At: $($status.NextRotationAt)"
        Write-Output " Requests Until Rotation: $($status.RequestsUntilRotation)"
    }

    return $status

    <#
    .SYNOPSIS
    Get the current status of user agent rotation.
 
    .DESCRIPTION
    This function returns information about the current user agent rotation status,
    including the current user agent in use, when it was last changed, and when the
    next rotation is expected to occur.
 
    .EXAMPLE
    # Display user agent rotation status
    Get-UserAgentStatus
 
    .NOTES
    Use this function to monitor the state of user agent rotation and verify your
    rotation settings are working as expected.
    #>

}