using System.Diagnostics.CodeAnalysis;

namespace Wayne.Lib.Log
{
    /// <summary>
    /// Debug logger
    /// </summary>
    public interface IDebugLogger
    {
        /// <summary>
        /// Tells whether the default category is active in the Normal level.
        /// </summary>
        bool IsActive();

        /// <summary>
        /// Tells whether the given category is active in the Normal level.
        /// </summary>
        bool IsActive(object category);

        /// <summary>
        /// Tells whether the default category is active in the given level.
        /// </summary>
        bool IsActive(DebugLogLevel debugLogLevel);

        /// <summary>
        /// Tells whether the given category is active in the given level.
        /// </summary>
        bool IsActive(object category, DebugLogLevel debugLogLevel);

        /// <summary>
        /// Adds a new object to the debug log entry.
        /// </summary>
        /// <param name="obj">The log object that are added.</param>
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "obj")]
        void Add(object obj);

        /// <summary>
        /// Adds a new object to the debug log entry.
        /// </summary>
        /// <param name="obj">The log object that are added.</param>
        /// <param name="level">TDB</param>
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "obj")]
        void Add(object obj, DebugLogLevel level);

        /// <summary>
        /// Adds a new object to the debug log entry.
        /// </summary>
        /// <param name="obj">The log object that are added.</param>
        /// <param name="category">A specific category that this log is about.</param>
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "obj")]
        void Add(object obj, object category);

        /// <summary>
        /// Adds a new object to the debug log entry.
        /// </summary>
        /// <param name="obj">The log object that are added.</param>
        /// <param name="category">A specific category that this log is about.</param>
        /// <param name="level">TDB</param>
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "obj")]
        void Add(object obj, object category, DebugLogLevel level);
    }
}