using System;
using System.Collections.Generic;
using System.Linq;
using PolyTrader.Core.Agents;

namespace PolyTrader.Modules.Supervisor.Agent
{
    /// <summary>
    /// Ein Supervisor-Profil (S-3): Fokus-Anweisung + optionales Tool-Subset über EINER gemeinsamen
    /// Agent-Infrastruktur (Konzept §4a) — bewusst KEINE Agent-zu-Agent-Orchestrierung.
    /// <see cref="Budget"/> überschreibt den Standard-Kostendeckel des Laufs (null = Standard).
    /// </summary>
    public sealed record SupervisorProfile(string Name, string PromptAddendum, string[]? ToolFilter)
    {
        public AgentBudget? Budget { get; init; }

        public override string ToString() => Name;
    }

    /// <summary>Die eingebauten Profile. Modul-Wissen liegt im Architektur-Kontext; hier nur der Fokus.</summary>
    public static class SupervisorProfiles
    {
        public static readonly SupervisorProfile Allgemein = new(
            "Allgemein",
            "",
            null);

        public static readonly SupervisorProfile Technik = new(
            "Technik",
            "FOKUS TECHNIK-SUPERVISOR: Du prüfst ausschließlich die technische Gesundheit — Fehler-/Warning-" +
            "Muster in den Logs, fehlgeschlagene/stornierte Orders, CLOB-Fehlerantworten, auffällige " +
            "Latenzen und Lücken in den Datenketten. KEINE Strategie-Bewertung (ob ein Trade klug war, " +
            "ist nicht dein Thema — nur ob die Software korrekt funktioniert hat).",
            new[] { "read_logs", "query_order_events", "query_decisions", "get_dossier", "get_architecture_context" });

        public static readonly SupervisorProfile CopyTrading = new(
            "CopyTrading",
            "FOKUS COPYTRADING-SUPERVISOR: Du bewertest die CopyTrading-Strategie — Master-Qualität vs. " +
            "Ausführungsqualität (Latenz/Preisdifferenz Signal→Fill), Verhalten der SELL-Eskalationsleiter, " +
            "Reject-Muster (waren die Risk-Limits klug oder haben sie profitable Trades verhindert?). " +
            "Filtere Daten auf ModuleName='CopyTrading'.",
            null);

        public static readonly SupervisorProfile ResolutionFarming = new(
            "ResolutionFarming",
            "FOKUS RF-SUPERVISOR: Du bewertest die ResolutionFarming-Strategie — Kalibrierung (realisierte " +
            "Winrate je Einstiegspreisband vs. implizite Wahrscheinlichkeit), Cluster-Risiken, Scanner-" +
            "Qualität. Filtere Daten auf ModuleName='ResolutionFarming'.",
            null);

        public static IReadOnlyList<SupervisorProfile> All { get; } =
            new[] { Allgemein, Technik, CopyTrading, ResolutionFarming };

        public static SupervisorProfile ByName(string? name) =>
            All.FirstOrDefault(p => string.Equals(p.Name, name, StringComparison.OrdinalIgnoreCase)) ?? Allgemein;
    }
}
