using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using PolyTrader.Core.Configuration;
using PolyTrader.Core.Modularity;
using PolyTrader.Modules.ResolutionFarming.Persistence;
using PolyTrader.Modules.ResolutionFarming.Persistence.Ef;
namespace PolyTrader.Modules.ResolutionFarming
{
///
/// Strategiemodul „ResolutionFarming": kauft systematisch unterbewertete Favoriten (~0.90–0.98)
/// in bald auflösenden Märkten, hält bis zur Resolution und löst ein (Favorite-Longshot-Reversal).
/// Erstes neues Strategiemodul über Copytrading hinaus – geringster Infrastrukturbedarf.
///
/// Aufbau (inkrementell): geldkritische Entscheidungslogik liegt pur und unit-getestet in
/// Logic/ (FarmingRiskEngine, FarmingScanner, FarmingFillModel); Persistenz, Scanner-Job,
/// Execution und UI folgen in eigenen Slices. Live-CLOB/On-Chain-Redeem sind Zielland-Arbeit.
///
public class ResolutionFarmingModule : IPolyTraderModule
{
public string Name => "ResolutionFarming";
public string DbPrefix => "rf_";
public void RegisterServices(IServiceCollection services, IConfiguration configuration)
{
// Modul-Persistenz: EF Core / Pomelo / MySQL (thread-safer DbContextFactory), eigene rf_-Tabellen.
var conn = configuration["Database:MySqlConnectionString"] ?? string.Empty;
services.AddDbContextFactory(o => o.UseMySql(conn, DatabaseServerVersion.Value));
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
// Read-only-Scanner (Phase RF-1). Marktquelle vorerst NullFarmingMarketSource: das Modul
// läuft ohne Live-Gamma/CLOB-Anbindung (die im Zielland registriert wird) und produziert
// dann korrekt keine Kandidaten.
services.AddSingleton();
services.AddSingleton();
services.AddHostedService(sp => sp.GetRequiredService());
// Demo-Execution + Resolution-Monitor (Phase RF-2). Marktauflösungs-Quelle vorerst Null
// (nichts löst auf), bis die Live-Data-API im Zielland verdrahtet ist. Live-Order-Execution
// und On-Chain-Redeem sind ebenfalls Zielland-Arbeit.
services.AddSingleton();
services.AddSingleton();
services.AddHostedService(sp => sp.GetRequiredService());
services.AddSingleton();
services.AddHostedService(sp => sp.GetRequiredService());
// Live-Marktquelle, Live-Execution, On-Chain-Auto-Redeem und Kalibrierung folgen (Zielland).
}
///
/// Aktuell ohne Ansicht: Die WinForms-UI wurde mit der Linux-Portierung entfernt, die
/// Avalonia-Ansicht folgt (Stufe L3/L4). Die Fachlogik dieses Moduls laeuft davon
/// unabhaengig weiter – die Shell zeigt schlicht kein Fenster fuer das Modul an.
///
/// Beim Nachbau zu erhalten (Spezifikation: docs/UI-SPEZIFIKATION-WinForms.md,
/// Originalcode: Git-Tag winforms-final):
///
/// - View-ID resolutionfarming.main (stabil – Launcher-Button und Symbol haengen daran)
/// - Titel ResolutionFarming, Gruppe ResolutionFarming, Order 200
/// - Ein Fenster fuers ganze Modul: ResolutionFarmingMainForm mit Tabs: Kandidaten / Positionen / Historie+Statistik / Settings
///
///
public void RegisterUi(IModuleUiHost host, IServiceProvider services)
{
// Bewusst leer, bis die Avalonia-Ansicht steht (siehe Doku oben).
}
public Task StartAsync(CancellationToken cancellationToken) => Task.CompletedTask;
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
}