using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using OTSSignsOrchestrator.Core.Data; using OTSSignsOrchestrator.Core.Models.Entities; namespace OTSSignsOrchestrator.Desktop.ViewModels; /// /// ViewModel for viewing operation logs. /// public partial class LogsViewModel : ObservableObject { private readonly IServiceProvider _services; [ObservableProperty] private ObservableCollection _logs = new(); [ObservableProperty] private string _statusMessage = string.Empty; [ObservableProperty] private bool _isBusy; [ObservableProperty] private int _maxEntries = 100; public LogsViewModel(IServiceProvider services) { _services = services; _ = LoadLogsAsync(); } [RelayCommand] private async Task LoadLogsAsync() { IsBusy = true; try { using var scope = _services.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); var items = await db.OperationLogs .Include(l => l.Instance) .OrderByDescending(l => l.Timestamp) .Take(MaxEntries) .ToListAsync(); Logs = new ObservableCollection(items); StatusMessage = $"Showing {items.Count} log entries."; } catch (Exception ex) { StatusMessage = $"Error loading logs: {ex.Message}"; } finally { IsBusy = false; } } }