using System;
using System.Collections.ObjectModel;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Avalonia.Threading;
using PolyTrader.App.Avalonia.ViewModels;
using PolyTrader.Core.Analytics;
using PolyTrader.Core.Modularity;
using PolyTrader.Modules.Supervisor.Agent;
using PolyTrader.Modules.Supervisor.Counterfactual;
using PolyTrader.Modules.Supervisor.Persistence;
using PolyTrader.Modules.Supervisor.Services;
using PolyTraderSharp.Services;
namespace PolyTrader.App.Avalonia.Views.Modules
{
///
/// Supervisor: Analyse-Chat gegen den Agenten, Dossiers je Signal, gespeicherte Berichte und
/// Counterfactuals. Layout vollständig in SupervisorWindow.axaml.
///
public partial class SupervisorWindow : Window
{
private readonly ObservableCollection _chat = new();
private readonly ObservableCollection _signals = new();
private readonly ObservableCollection _reports = new();
private readonly ObservableCollection _counterfactuals = new();
private readonly SupervisorAgent _agent = null!;
private readonly DossierService _dossiers = null!;
private readonly ISupervisorReportRepository _reportRepo = null!;
private readonly ISupervisorCounterfactualRepository _cfRepo = null!;
private readonly TerminalLogger _logger = null!;
public SupervisorWindow() => AvaloniaXamlLoader.Load(this);
public SupervisorWindow(IModuleUiHost host, SupervisorAgent agent, DossierService dossiers,
ISupervisorReportRepository reportRepo, ISupervisorCounterfactualRepository cfRepo,
TerminalLogger logger) : this()
{
this.FindControl("menuBar")!.Attach(host, "supervisor.main", this);
_agent = agent;
_dossiers = dossiers;
_reportRepo = reportRepo;
_cfRepo = cfRepo;
_logger = logger;
this.FindControl("chatLines")!.ItemsSource = _chat;
this.FindControl("gridSignals")!.ItemsSource = _signals;
this.FindControl("gridReports")!.ItemsSource = _reports;
this.FindControl("gridCounterfactual")!.ItemsSource = _counterfactuals;
var cbProfile = this.FindControl("cbProfile")!;
cbProfile.ItemsSource = SupervisorProfiles.All.ToList();
cbProfile.SelectedIndex = 0;
this.FindControl