Public/Get-BridgeStatus.ps1

function Get-BridgeStatus {
    <#
    .SYNOPSIS
    Ανακτά την τρέχουσα κατάσταση γεφυρών από διαδικτυακή σελίδα.

    .DESCRIPTION
    Η Get-BridgeStatus ανακτά HTML, αναλύει την κατάσταση
    και επιστρέφει λίστα καταστάσεων γεφυρών χρησιμοποιώντας
    τα utility functions New-BridgeResult και Test-BridgeResult
    για καλύτερο error handling και DRY compliance.

    .PARAMETER OutputFile
    (Προαιρετικό) Το αρχείο όπου θα αποθηκευτεί η τρέχουσα κατάσταση.

    .PARAMETER Configuration
    (Προαιρετικό) Αντικείμενο διαμόρφωσης. Αν δεν παρέχεται, δημιουργείται αυτόματα.

    .OUTPUTS
    [PSCustomObject] - Αντικείμενο αποτελέσματος με Success, Data, ErrorMessage, ErrorCode και Timestamp.

    .EXAMPLE
    Get-BridgeStatus -OutputFile 'C:\Logs\current-status.json'

    .EXAMPLE
    $result = Get-BridgeStatus
    if (Test-BridgeResult $result) {
        Write-Host "Success: $($result.Data.Count) bridges found"
    } else {
        Write-Warning "Error: $($result.ErrorMessage)"
    }

    .NOTES
    Χρησιμοποιεί pipeline approach με New-BridgeResult/Test-BridgeResult για καλύτερο error handling.
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$OutputFile,

        [Parameter()]
        [PSCustomObject]$Configuration
    )

    begin {
        # Stage 0: Configuration Setup
        if (-not $Configuration) {
            try {
                $Configuration = New-BridgeConfiguration
            } catch {
                return New-BridgeResult -Success $false -ErrorMessage "Configuration initialization failed: $($_.Exception.Message)" -ErrorCode 'CONFIG_ERROR'
            }
        }
    }    process { # Stage 1: Data Acquisition - Get HTML content
        $htmlResult = Get-BridgeHtml -Configuration $Configuration
        if (-not $htmlResult) {
            $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(
                    [System.InvalidOperationException]::new('HTML retrieval returned null'),
                    'HTML_NULL',
                    [System.Management.Automation.ErrorCategory]::ConnectionError,
                    $null
                ))
        }
        if (-not (Test-BridgeResult $htmlResult)) {
            $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(
                    [System.Exception]::new($htmlResult.ErrorMessage),
                    $htmlResult.ErrorCode,
                    [System.Management.Automation.ErrorCategory]::ConnectionError,
                    $null
                ))
        }

        # Stage 2: Data Processing - Convert HTML to bridge status
        $statusResult = ConvertFrom-BridgeHtml -Html $htmlResult.Data -Configuration $Configuration
        if (-not (Test-BridgeResult $statusResult)) {
            $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(
                    [System.Exception]::new($statusResult.ErrorMessage),
                    $statusResult.ErrorCode,
                    [System.Management.Automation.ErrorCategory]::ParserError,
                    $null                ))
        }

        # Stage 3: Data Persistence (optional)
        if ($OutputFile) {
            $exportResult = Export-BridgeStatusJson -Data $statusResult.Data -Path $OutputFile
            if (-not (Test-BridgeResult $exportResult)) {
                $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new(
                        [System.Exception]::new($exportResult.ErrorMessage),
                        $exportResult.ErrorCode,
                        [System.Management.Automation.ErrorCategory]::WriteError,
                        $OutputFile
                    ))
            }
        }

        # Return the actual data for backward compatibility
        return $statusResult.Data
    }
}