namespace DTLib.Loggers;

// вывод лога в консоль и файл
public class AsyncLogger : BaseLogger
{
    public AsyncLogger(string logfile) : base(logfile) { }

    public AsyncLogger(string dir, string programName) : base(dir, programName) { }

    readonly object consolelocker = new();
    public override void Log(params string[] msg)
    {
        lock (statelocker) if (!IsEnabled) return;
        // добавление даты
        if (msg.Length == 1) msg[0] = "[" + DateTime.Now.ToString() + "]: " + msg[0];
        else msg[1] = "[" + DateTime.Now.ToString() + "]: " + msg[1];
        // перенос строки
        msg[msg.Length - 1] += '\n';
        // вывод в консоль
        lock (consolelocker)
            ColoredConsole.Write(msg);
        // вывод в файл
        if (msg.Length == 1)
            lock (Logfile) File.AppendAllText(Logfile, msg[0]);
        else
        {
            StringBuilder strB = new();
            for (ushort i = 0; i < msg.Length; i++)
                strB.Append(msg[++i]);
            lock (Logfile) File.AppendAllText(Logfile, strB.ToString());
        }
    }
    public void LogAsync(params string[] msg) => Task.Run(() => Log(msg));
}
