using IBKRTrader.Core.Logging;
using IBKRTrader.Core.Modules;
using IBKRTrader.Core.Workers;
using IBKRTrader.Modules.CongressTrading.Database;
using IBKRTrader.Modules.CongressTrading.Scraper;
using IBKRTrader.Modules.CongressTrading.UI;
using IBKRTrader.Modules.CongressTrading.Workers;
using Microsoft.Extensions.DependencyInjection;
namespace IBKRTrader.Modules.CongressTrading;
///
/// CongressTrading-Modul: kopiert Aktien-Trades von US-Kongressmitgliedern
/// (Quelle: capitoltrades.com).
///
/// Architektur-Regel: Dieses Modul hängt sich ausschließlich über den
/// -Vertrag ein. Der Core kennt dieses Modul NICHT –
/// die Abhängigkeit geht nur von Modul → Core.
///
public sealed class CongressTradingModule : IModule
{
public const string ModuleKey = "CT";
public string Key => ModuleKey;
public string DisplayName => "Congress Trading";
public string Description => "Kopiert Aktien-Trades von US-Kongressmitgliedern (capitoltrades.com).";
public string Version => "1.0.0";
/// Registriert alle Modul-Services im DI-Container.
public void RegisterServices(IServiceCollection services)
{
// Datenbank
services.AddSingleton();
services.AddSingleton();
// Scraper
services.AddSingleton();
// Worker
services.AddSingleton();
services.AddSingleton();
}
/// Führt die Modul-Migrationen aus.
public async Task InitializeAsync(IServiceProvider provider)
{
var migrations = provider.GetRequiredService();
await migrations.RunAsync();
// Einmaliger Reset (deaktiviert): löscht alten Fortschritt für sauberen Neustart.
// var repo = provider.GetRequiredService();
// await repo.ResetHistoryImportAsync();
}
/// Gibt die Modul-Worker für die WorkerEngine zurück.
public IEnumerable GetWorkers(IServiceProvider provider) =>
[
provider.GetRequiredService(),
provider.GetRequiredService()
];
/// Erzeugt das eigenständige Modul-Fenster.
public Form CreateWindow(IServiceProvider provider)
=> new CongressTradingForm(
provider.GetRequiredService(),
provider.GetRequiredService(),
provider.GetRequiredService());
}