Assets/OpsUtils.psm1

# OpsUtils.psm1
function Write-OpsLog {
    param (
        [Parameter(Mandatory=$true)]
        [string]$Message,

        [Parameter(Mandatory=$false)]
        [ValidateSet("DEBUG", "INFO", "WARNING", "ERROR")]
        [string]$Level = "INFO"
    )

    $currentLevel = $env:OPS_LOG_LEVEL
    if ([string]::IsNullOrWhiteSpace($currentLevel)) {
        $currentLevel = "INFO"
    }

    $levels = @{
        "DEBUG" = 0
        "INFO" = 1
        "WARNING" = 2
        "ERROR" = 3
    }

    if ($levels[$Level] -ge $levels[$currentLevel]) {
        $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        $logMsg = "[$timestamp] [$Level] $Message"
        Write-Output $logMsg

        # JSON Logging
        if (-not [string]::IsNullOrWhiteSpace($env:OPS_LOG_FILE)) {
            $jsonLog = @{
                Timestamp = $timestamp
                Level = $Level
                Message = $Message
            } | ConvertTo-Json -Compress
            Add-Content -Path $env:OPS_LOG_FILE -Value $jsonLog
        }
    }
}

Export-ModuleMember -Function Write-OpsLog