Private/Get-BridgeStatusFromHtml.ps1

function Get-BridgeStatusFromHtml {
    [CmdletBinding()]
    <#
    .SYNOPSIS
    Αναλύει HTML και επιστρέφει καταστάσεις γέφυρας.

    .DESCRIPTION
    Η Get-BridgeStatusFromHtml αναλύει HTML περιεχόμενο και επιστρέφει
    την τρέχουσα κατάσταση για κάθε γέφυρα που ανιχνεύεται.

    .PARAMETER Html
    Το HTML περιεχόμενο σε μορφή string.

    .PARAMETER Timestamp
    Η χρονική στιγμή συλλογής του HTML.

    .OUTPUTS
    [pscustomobject[]] - Καταστάσεις γέφυρας με ονόματα και timestamps.

    .EXAMPLE
    Get-BridgeStatusFromHtml -Html $htmlContent -Timestamp (Get-Date)

    .NOTES
    Χρησιμοποιεί regex και structured parsing για ανάλυση.
    #>


    [OutputType([pscustomobject[]])]
    param (
        [Parameter(Mandatory)][string]$Html,
        [Parameter(Mandatory)][string]$Timestamp
    )
    $baseUrl = 'https://www.topvision.gr/dioriga/'
    $patterns = @{
        'poseidonia' = @{
            'Κλειστή με πρόγραμμα' = 'image-bridge-open-with-schedule-posidonia\.php(\?\d+)?'
            'Μόνιμα κλειστή'       = 'image-bridge-always-close\.php(\?\d+)?'
            'Ανοιχτή'              = 'image-bridge-open-no-schedule\.php\?\d+'
        }
        'isthmia'    = @{
            'Κλειστή με πρόγραμμα' = 'image-bridge-open-with-schedule-isthmia\.php(\?\d+)?'
            'Μόνιμα κλειστή'       = 'image-bridge-always-close\.php(\?\d+)?'
            'Ανοιχτή'              = 'image-bridge-open-no-schedule\.php\?\d+'
        }
    }
    $result = @()
    foreach ($location in $patterns.Keys) {
        $writeBridgeLogSplat = @{
            Stage   = 'Ανάλυση'
            Message = "➤ Επεξεργασία: $location"
            Level   = 'Debug'
        }
        Write-BridgeLog @writeBridgeLogSplat
        $getBridgeImagesSplat = @{
            HtmlContent = $Html
            Location    = $location
        }
        $bridgeImages = Get-BridgeImages @getBridgeImagesSplat
        if (-not $bridgeImages -or $bridgeImages.Count -eq 0) {
            $writeBridgeLogSplat = @{
                Stage   = 'Σφάλμα'
                Message = "❌ Δεν εντοπίστηκαν εικόνες για $location"
                Level   = 'Warning'
            }
            Write-BridgeLog @writeBridgeLogSplat
            $errorRecord = [System.Management.Automation.ErrorRecord]::new(
                ([System.Exception]::new("Δεν βρέθηκαν εικόνες για το $location.")),
                'BridgeImagesNotFound',
                [System.Management.Automation.ErrorCategory]::ObjectNotFound,
                $location
            )
            $PSCmdlet.ThrowTerminatingError($errorRecord)
            continue
        }
        $writeBridgeLogSplat = @{
            Stage   = 'Ανάλυση'
            Message = '✔ Εικόνες:'
            Level   = 'Debug'
        }
        Write-BridgeLog @writeBridgeLogSplat
        $writeBridgeLogSplat = @{
            Stage   = 'Ανάλυση'
            Message = " • $($_.src)"
            Level   = 'Debug'
        }
        $bridgeImages | ForEach-Object { Write-BridgeLog @writeBridgeLogSplat }
        foreach ($statusEntry in $patterns[$location].GetEnumerator()) {
            $status = $statusEntry.Key
            $pattern = $statusEntry.Value
            $resolveBridgeStatusSplat = @{
                Location         = $location
                Status           = $status
                Pattern          = $pattern
                BridgeImages     = $bridgeImages
                RequireInfoImage = ($status -eq 'Ανοιχτή')
            }
            $image = Resolve-BridgeStatus @resolveBridgeStatusSplat
            if ($image) {
                $writeBridgeLogSplat = @{
                    Stage   = 'Ανάλυση'
                    Message = "✅ Εντοπίστηκε: Γέφυρα: $location Κατάσταση: $status"
                    Level   = 'Debug'
                }
                Write-BridgeLog @writeBridgeLogSplat
                $newBridgeStatusObjectSplat = @{
                    Location  = $location
                    Status    = $status
                    Timestamp = $Timestamp
                    ImageSrc  = $image.src
                    BaseUrl   = $baseUrl
                }
                $object = New-BridgeStatusObject @newBridgeStatusObjectSplat
                $result += $object
                break
            } else {
                $writeBridgeLogSplat = @{
                    Stage   = 'Ανάλυση'
                    Message = "⏭ Δεν ταιριάζει: $status"
                    Level   = 'Debug'
                }
                Write-BridgeLog @writeBridgeLogSplat
            }
        }
    }
    return $result
}