using System;
using System.Windows;
using System.Windows.Media;
using AutoBidder.Utilities;
namespace AutoBidder
{
///
/// Logging functionality with color-coded severity levels and configurable minimum level filtering
///
public partial class MainWindow
{
///
/// Scrive un messaggio nel log globale con filtraggio basato sul livello minimo configurato
///
/// Messaggio da loggare
/// Livello di severità del messaggio
private void Log(string message, LogLevel level = LogLevel.Info)
{
Dispatcher.BeginInvoke(() =>
{
try
{
// Carica impostazioni per ottenere livello minimo e limite righe
var settings = SettingsManager.Load();
// Filtra messaggi in base al livello minimo configurato
MinimumLogLevel minLevel = MinimumLogLevel.Normal; // Default
if (Enum.TryParse(settings.MinLogLevel, out var parsedLevel))
{
minLevel = parsedLevel;
}
// Se il livello del messaggio è maggiore del minimo configurato, ignora
if ((int)level > (int)minLevel)
{
return;
}
var timestamp = DateTime.Now.ToString("HH:mm:ss");
// Prefisso in base al livello per chiarezza
string prefix = level switch
{
LogLevel.Error => "[ERROR]",
LogLevel.Warning => "[WARN]",
LogLevel.Info => "[INFO]",
LogLevel.Success => "[OK]",
LogLevel.Debug => "[DEBUG]",
LogLevel.Trace => "[TRACE]",
_ => "[LOG]"
};
var logEntry = $"[{timestamp}] {prefix} {message}";
// Color coding based on severity for dark theme
var color = level switch
{
LogLevel.Error => new SolidColorBrush(Color.FromRgb(232, 17, 35)), // #E81123 (Red)
LogLevel.Warning => new SolidColorBrush(Color.FromRgb(255, 191, 0)), // #FFBF00 (Yellow)
LogLevel.Success => new SolidColorBrush(Color.FromRgb(0, 216, 0)), // #00D800 (Green)
LogLevel.Info => new SolidColorBrush(Color.FromRgb(100, 180, 255)), // #64B4FF (Light Blue)
LogLevel.Debug => new SolidColorBrush(Color.FromRgb(255, 140, 255)), // #FF8CFF (Magenta)
LogLevel.Trace => new SolidColorBrush(Color.FromRgb(160, 160, 160)), // #A0A0A0 (Gray)
_ => new SolidColorBrush(Color.FromRgb(204, 204, 204)) // #CCCCCC (Light Gray)
};
var p = new System.Windows.Documents.Paragraph { Margin = new Thickness(0, 2, 0, 2) };
var r = new System.Windows.Documents.Run(logEntry) { Foreground = color };
p.Inlines.Add(r);
LogBox.Document.Blocks.Add(p);
// Mantieni solo gli ultimi N paragrafi (configurabile dalle impostazioni)
int maxLogLines = settings.MaxGlobalLogLines;
if (LogBox.Document.Blocks.Count > maxLogLines)
{
// Rimuovi i paragrafi più vecchi (primi inseriti)
int excessCount = LogBox.Document.Blocks.Count - maxLogLines;
for (int i = 0; i < excessCount; i++)
{
if (LogBox.Document.Blocks.FirstBlock != null)
{
LogBox.Document.Blocks.Remove(LogBox.Document.Blocks.FirstBlock);
}
}
}
// Auto-scroll if near bottom
if (LogBox.VerticalOffset >= LogBox.ExtentHeight - LogBox.ViewportHeight - 40)
{
LogBox.ScrollToEnd();
}
}
catch { }
});
}
}
}