using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Channel;

namespace PlanTempus.Core.Telemetry
{
    public class SeqTelemetryChannel(IMessageChannel<ITelemetry> messageChannel, TelemetryClient telemetryClient)
        : InMemoryChannel, ITelemetryChannel
    {
        public new void Send(ITelemetry telemetry)
        {
            if (telemetry.Context.GlobalProperties.TryGetValue("OmitSeqTelemetryChannel", out var value))
                if (value == "true")
                {
                    base.Send(telemetry);
                    return;
                }

            try
            {
                var writeTask = messageChannel.Writer.WriteAsync(telemetry).AsTask();
                writeTask.ContinueWith(t =>
                {
                    if (t.Exception != null)
                    {
                        throw t.Exception;
                    }
                }, TaskContinuationOptions.OnlyOnFaulted);
            }
            catch (Exception e)
            {
                telemetryClient.TrackException(e,
                    new Dictionary<string, string> { { "OmitSeqTelemetryChannel", "true" } });
            }

            base.Send(telemetry);
        }
    }
}