using System;
using System.Text;
using TechnologyAssembler.Core.Diagnostics;

namespace HashCalculator.GUI
{
    internal static class TracerListener
    {
        private static readonly object _lock = new();
        private static readonly StringBuilder _sb = new();
        public static event EventHandler? DataAvailaible;

        public static void StartListening()
        {
            lock (_lock)
            {
                if (Tracer.TraceWrite != null)
                {
                    throw new InvalidOperationException($"{nameof(Tracer.TraceWrite)} already set");
                }

                Tracer.TraceWrite = new TraceWriteDelegate((s, t, m) =>
                {
                    var type = $"{t}    ".ToLowerInvariant().Substring(0, 4);
                    WriteLine($"[{s}] {type}: {m}");
                });
            }
        }

        public static void WriteLine(string message)
        {
            lock (_lock)
            {
                _sb.AppendLine(message);
            }
            DataAvailaible?.Invoke(null, EventArgs.Empty);
        }

        public static string GetText()
        {
            lock (_lock)
            {
                var result = _sb.ToString();
                _sb.Clear();
                return result;
            }
        }
    }
}