Private/Connect-AzureBackend.ps1

function Connect-AzureBackend {
    [CmdletBinding()]
    param(
        [string]$Tenant,
        [string]$Subscription
    )

    Assert-CommandAvailable `
        -CommandName 'Connect-AzAccount' `
        -InstallHint "Install the Az.Accounts module with: Install-Module Az.Accounts -Scope CurrentUser"

    $existingContext = Get-AzContext -ErrorAction SilentlyContinue

    if (-not $existingContext) {
        Write-Host "No active Azure session found. Starting login..."
        $connectParams = @{
            ErrorAction = 'Stop'
        }

        if (-not [string]::IsNullOrWhiteSpace($Tenant)) {
            $connectParams.Tenant = $Tenant
        }

        if (-not [string]::IsNullOrWhiteSpace($Subscription)) {
            $connectParams.Subscription = $Subscription
        }

        $loginResult = Connect-AzAccount @connectParams
        $azContext = Get-AzContext -ErrorAction SilentlyContinue

        if (-not $azContext -and $loginResult.Context) {
            $azContext = $loginResult.Context
        }

        if (-not $azContext) {
            throw [System.InvalidOperationException]::new(
                'Azure login completed, but no active context was found.'
            )
        }
    } else {
        $azContext = $existingContext
    }

    [pscustomobject]@{
        PSTypeName    = 'PSCumulus.ConnectionResult'
        Provider      = 'Azure'
        Connected     = $true
        ContextName   = $azContext.Name
        TenantId      = $azContext.Tenant.Id
        Subscription  = $azContext.Subscription.Name
        SubscriptionId = $azContext.Subscription.Id
        Account       = $azContext.Account.Id
    }
}