using System.Threading;
using System.Threading.Tasks;

namespace PolyTrader.Core.Notifications
{
    /// <summary>Einstufung einer Benachrichtigung – steuert später die Kanalwahl und das Alarmverhalten.</summary>
    public enum NotificationSeverity
    {
        /// <summary>Reine Information (z.B. Tagesbericht).</summary>
        Info,

        /// <summary>Auffälligkeit, die Beachtung verdient (z.B. Auto-Pause eines Master-Traders).</summary>
        Warning,

        /// <summary>Kritisch – erfordert Eingreifen (z.B. Verlust-Eskalation der Sell-Ladder).</summary>
        Critical
    }

    /// <summary>
    /// Neutraler Ausgang für Benachrichtigungen an den Betreiber. Ersetzt die frühere direkte
    /// Abhängigkeit der Dienste auf den (verworfenen) Threema-Versand: die Fachlogik kennt nur noch
    /// diese Schnittstelle, der tatsächliche Kanal wird per DI gesetzt. Geplante Implementierungen
    /// sind RocketChat und Telegram; bis dahin schreibt <see cref="LogNotificationSink"/> ins Terminal.
    ///
    /// <para><b>Vertrag – für JEDE Implementierung bindend:</b> <see cref="SendAsync"/> wirft NIEMALS.
    /// Netzwerk- oder Kanalfehler werden intern abgefangen und protokolliert. Ein ausgefallener
    /// Benachrichtigungskanal darf den Handelsablauf unter keinen Umständen unterbrechen – die
    /// Aufrufer verzichten deshalb bewusst auf eigene try/catch-Blöcke.</para>
    /// </summary>
    public interface INotificationSink
    {
        /// <summary>
        /// Sendet eine Benachrichtigung. Wirft nie (siehe Vertrag in der Schnittstellen-Doku).
        /// </summary>
        Task SendAsync(string message, NotificationSeverity severity = NotificationSeverity.Info,
                       CancellationToken ct = default);
    }
}
