using System;
using System.Threading;
using System.Threading.Tasks;
using PolyTraderSharp.Services;

namespace PolyTrader.Core.Notifications
{
    /// <summary>
    /// Übergangs-Implementierung von <see cref="INotificationSink"/>: schreibt Benachrichtigungen ins
    /// Terminal-Log (und damit in die Tages-JSONL-Datei), bis die echten Kanäle (RocketChat, Telegram)
    /// angebunden sind. Damit gehen Auto-Pause- und Eskalationsmeldungen nach dem Threema-Ausbau nicht
    /// verloren – sie sind im Terminal-Fenster und in den Logs auffindbar.
    ///
    /// Erfüllt den No-Throw-Vertrag der Schnittstelle.
    /// </summary>
    public sealed class LogNotificationSink : INotificationSink
    {
        private readonly TerminalLogger _logger;

        public LogNotificationSink(TerminalLogger logger) => _logger = logger;

        public Task SendAsync(string message, NotificationSeverity severity = NotificationSeverity.Info,
                              CancellationToken ct = default)
        {
            try
            {
                string text = $"🔔 [Benachrichtigung] {message}";
                switch (severity)
                {
                    case NotificationSeverity.Critical:
                    case NotificationSeverity.Warning:
                        _logger.Warning(text);
                        break;
                    default:
                        _logger.Info(text);
                        break;
                }
            }
            catch (Exception ex)
            {
                // No-Throw-Vertrag: ein defekter Benachrichtigungsweg darf den Handel nie unterbrechen.
                try { Console.WriteLine($"[NotificationSink] Zustellung fehlgeschlagen (ignoriert): {ex.Message}"); }
                catch { /* selbst Console kann in Sonderfällen fehlschlagen */ }
            }

            return Task.CompletedTask;
        }
    }
}
