using System;

namespace BepInEx.Logging;

/// <summary>
///     Log event arguments. Contains info about the log message.
/// </summary>
public class LogEventArgs : EventArgs
{
    /// <summary>
    ///     Creates the log event args-
    /// </summary>
    /// <param name="data">Logged data.</param>
    /// <param name="level">Log level of the data.</param>
    /// <param name="source">Log source that emits these args.</param>
    public LogEventArgs(object data, LogLevel level, ILogSource source)
    {
        Data = data;
        Level = level;
        Source = source;
    }

    /// <summary>
    ///     Logged data.
    /// </summary>
    public object Data { get; }

    /// <summary>
    ///     Log levels for the data.
    /// </summary>
    public LogLevel Level { get; }

    /// <summary>
    ///     Log source that emitted the log event.
    /// </summary>
    public ILogSource Source { get; }

    /// <inheritdoc />
    public override string ToString() => $"[{Level,-7}:{Source.SourceName,10}] {Data}";

    /// <summary>
    ///     Like <see cref="ToString" /> but appends newline at the end.
    /// </summary>
    /// <returns>Same output as <see cref="ToString" /> but with new line.</returns>
    public string ToStringLine() => $"[{Level,-7}:{Source.SourceName,10}] {Data}{Environment.NewLine}";
}
