using Microsoft.Extensions.DependencyInjection; using RackPeek.Domain.Resources.Routers; using Spectre.Console; using Spectre.Console.Cli; namespace Shared.Rcl.Commands.Routers; public class RouterReportCommand( IServiceProvider serviceProvider ) : AsyncCommand { public override async Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) { using IServiceScope scope = serviceProvider.CreateScope(); RouterHardwareReportUseCase useCase = scope.ServiceProvider.GetRequiredService(); RouterHardwareReport report = await useCase.ExecuteAsync(); if (report.Routers.Count == 0) { AnsiConsole.MarkupLine("[yellow]No Routers found.[/]"); return 0; } Table table = new Table() .Border(TableBorder.Rounded) .AddColumn("Name") .AddColumn("Model") .AddColumn("Managed") .AddColumn("PoE") .AddColumn("Ports") .AddColumn("Max Speed") .AddColumn("Port Summary"); foreach (RouterHardwareRow s in report.Routers) table.AddRow( s.Name, s.Model, s.Managed ? "[green]yes[/]" : "[red]no[/]", s.Poe ? "[green]yes[/]" : "[red]no[/]", s.TotalPorts.ToString(), $"{s.MaxPortSpeedGb}G", s.PortSummary ); AnsiConsole.Write(table); return 0; } }