using System.Diagnostics;
using AyCode.Core.Enums;
using System.Runtime.CompilerServices;

namespace AyCode.Core.Loggers;

public interface IAcLogWriterBase
{
    public string? CategoryName { get; }

    public void Detail(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);
    //public void DetailConditional(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);

    public void Debug(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);
    //public void DebugConditional(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);

    public void Info(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);
    //public void InfoConditional(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);

    public void Warning(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);
    //public void WarningConditional(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);

    public void Suggest(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);
    //public void SuggestConditional(string? text, string? categoryName = null, [CallerMemberName] string? memberName = null);

    public void Error(string? text, Exception? ex = null, string? categoryName = null, [CallerMemberName] string? memberName = null);
    //public void ErrorConditional(string? text, Exception? ex = null, string? categoryName = null, [CallerMemberName] string? memberName = null);

    public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName);
    //public void WriteConditional(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName);
    public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, Exception? ex);
    //public void WriteConditional(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, Exception? ex);
    public void Write(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage);
    //public void WriteConditional(AppType appType, LogLevel logLevel, string? logText, string? callerMemberName, string? categoryName, string? errorType, string? exMessage);

    public void Write(IAcLogItemClient logItem);
    //public void WriteConditional(IAcLogItemClient logItem);
}