using System;

namespace HellionChat.Util;

// Plugin.LogProxy bridge for consumers that cannot take a logger via the
// constructor: static helpers (EmoteCache et al.), Dalamud-reflected types
// (Configuration), data classes with mass instantiation (Message) and
// instance classes that only log from static methods (FontManager).
internal interface IPluginLogProxy
{
    void Verbose(string message);
    void Verbose(Exception exception, string message);
    void Verbose(string messageTemplate, params object[] values);

    void Debug(string message);
    void Debug(Exception exception, string message);
    void Debug(string messageTemplate, params object[] values);

    void Information(string message);
    void Information(Exception exception, string message);
    void Information(string messageTemplate, params object[] values);

    // IPluginLog exposes Info as a distinct method (short alias of
    // Information) — both are present so call-sites stay drop-in.
    void Info(string message);
    void Info(Exception exception, string message);
    void Info(string messageTemplate, params object[] values);

    void Warning(string message);
    void Warning(Exception exception, string message);
    void Warning(string messageTemplate, params object[] values);

    void Error(string message);
    void Error(Exception exception, string message);
    void Error(string messageTemplate, params object[] values);

    void Fatal(string message);
    void Fatal(Exception exception, string message);
    void Fatal(string messageTemplate, params object[] values);
}
