Private/Get-BridgeStatusObject.ps1

function Get-BridgeStatusObject {
    [CmdletBinding()]
    <#
    .SYNOPSIS
    Δημιουργεί αντικείμενο κατάστασης γέφυρας.

    .DESCRIPTION
    Η Get-BridgeStatusObject δημιουργεί structured αντικείμενο που περιέχει
    όνομα γέφυρας, κατάσταση, χρονική σφραγίδα και URL εικόνας.

    .PARAMETER Location
    Το αναγνωριστικό της γέφυρας ('poseidonia' ή 'isthmia').

    .PARAMETER Status
    Η κατάσταση της γέφυρας ('Ανοιχτή', 'Κλειστή', 'Άγνωστη').

    .PARAMETER Timestamp
    Η χρονική στιγμή καταγραφής.

    .PARAMETER ImageSrc
    Το URL ή το σχετικό path της εικόνας.

    .PARAMETER BaseUrl
    Το base URL για συμπλήρωση εικόνων (προεπιλογή https://www.topvision.gr/dioriga/).

    .OUTPUTS
    [pscustomobject] - Αντικείμενο κατάστασης.

    .EXAMPLE
    Get-BridgeStatusObject -Location 'poseidonia' -Status 'Closed' -Timestamp (Get-Date) -ImageSrc 'bridge1.jpg'

    .NOTES
    Επιστρέφει πάντα πλήρες αντικείμενο με σωστά πεδία.
    #>
    [OutputType([pscustomobject])]
    param (
        [Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$Location,
        [Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$Status,
        [Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$Timestamp,
        [Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$ImageSrc, [Parameter()][ValidateScript({
                if ([string]::IsNullOrEmpty($_) -or [Uri]::IsWellFormedUriString($_, [UriKind]::Absolute)) {
                    $true
                } else {
                    throw "The parameter '$_' is not a valid absolute URI."
                }
            })][string]$BaseUrl,
        [Parameter()]
        [PSCustomObject]$Configuration
    )

    # Use configuration or fallback for BaseUrl
    if (-not $BaseUrl) {
        if ($Configuration -and $Configuration.BaseImageUrl) {
            $BaseUrl = $Configuration.BaseImageUrl
        } else {
            $BaseUrl = 'https://www.topvision.gr/dioriga/'
        }
    }
    return [pscustomobject]@{
        PSTypeName   = 'Bridge.Status'
        GefyraName   = if ($Configuration -and $Configuration.BridgeNames -and $Configuration.BridgeNames[$Location]) {
            $Configuration.BridgeNames[$Location]
        } else {
            # Fallback to hardcoded values
            if ($Location -eq 'poseidonia') { 'Ποσειδωνία' } else { 'Ισθμία' }
        }
        GefyraStatus = $Status
        Timestamp    = $Timestamp
        ImageUrl     = if ($ImageSrc -match '^https?://') { $ImageSrc } else { "$BaseUrl$ImageSrc" }
    }
}