using IBKRTrader.Core.Workers;
using Microsoft.Extensions.DependencyInjection;
namespace IBKRTrader.Core.Modules;
///
/// Vertrag für ein eigenständiges Trading-Modul.
///
/// Architektur-Regel: Der Core kennt konkrete Module NICHT. Module hängen sich
/// ausschließlich über diesen Vertrag und den DI-Container ein
/// (Abhängigkeit nur Modul → Core, niemals umgekehrt).
///
/// Lebenszyklus:
/// 1. – vor dem Bauen des DI-Containers
/// 2. – beim App-Start (Migrationen etc.)
/// 3. – Worker werden der WorkerEngine übergeben
/// 4. – Launcher öffnet das Modul-Fenster
///
public interface IModule
{
/// Eindeutiges Modul-Kürzel, zugleich DB-Tabellen-Präfix (z. B. "CT").
string Key { get; }
/// Anzeigename im Launcher (z. B. "Congress Trading").
string DisplayName { get; }
/// Kurzbeschreibung der Strategie für den Launcher.
string Description { get; }
/// Modul-Version.
string Version { get; }
/// Registriert alle Modul-Services im DI-Container (vor dem Build).
void RegisterServices(IServiceCollection services);
/// Führt Modul-Migrationen und einmalige Initialisierung aus (beim Start).
Task InitializeAsync(IServiceProvider provider);
/// Liefert die Worker/Services des Moduls für die WorkerEngine.
IEnumerable GetWorkers(IServiceProvider provider);
/// Erzeugt das eigenständige Fenster des Moduls (vom Launcher geöffnet).
Form CreateWindow(IServiceProvider provider);
}