modules/HomeLab.Logging/Public/Get-LogEntries.ps1

function Get-LogEntries {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false)]
        [string]$LogFilePath = $Global:Config.LogFile,
        
        [Parameter(Mandatory = $false)]
        [string]$Pattern,
        
        [Parameter(Mandatory = $false)]
        [ValidateSet('Info', 'Warning', 'Error', 'Success')]
        [string]$Level,
        
        [Parameter(Mandatory = $false)]
        [datetime]$StartTime,
        
        [Parameter(Mandatory = $false)]
        [datetime]$EndTime,
        
        [Parameter(Mandatory = $false)]
        [int]$Tail
    )
    
    # Check if the log file exists
    if (-not (Test-Path -Path $LogFilePath)) {
        Write-Host "Log file does not exist at $LogFilePath" -ForegroundColor Yellow
        return @()
    }
    
    # Read the log file
    $logContent = Get-Content -Path $LogFilePath
    
    # Parse log entries
    $logEntries = @()
    foreach ($line in $logContent) {
        # Skip header lines and empty lines
        if ($line -match '^\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\] \[(\w+)\] (.+)$') {
            $timestamp = [datetime]::ParseExact($matches[1], 'yyyy-MM-dd HH:mm:ss', $null)
            $entryLevel = $matches[2]
            $message = $matches[3]
            
            $logEntries += [PSCustomObject]@{
                Timestamp = $timestamp
                Level = $entryLevel
                Message = $message
                OriginalLine = $line
            }
        }
    }
    
    # Apply filters
    if ($Pattern) {
        $logEntries = $logEntries | Where-Object { $_.Message -match $Pattern -or $_.OriginalLine -match $Pattern }
    }
    
    if ($Level) {
        $logEntries = $logEntries | Where-Object { $_.Level -eq $Level }
    }
    
    if ($StartTime) {
        $logEntries = $logEntries | Where-Object { $_.Timestamp -ge $StartTime }
    }
    
    if ($EndTime) {
        $logEntries = $logEntries | Where-Object { $_.Timestamp -le $EndTime }
    }
    
    # Apply tail if specified
    if ($Tail -gt 0) {
        $logEntries = $logEntries | Select-Object -Last $Tail
    }
    
    return $logEntries
}