/**
 * fn_debug.sqf
 * @Descr: Print logging messages through the ACE framework.
 * @Author: Glowbal
 *
 * @Arguments: [message ANY, level NUMBER (Optional)]
 * @Return:  BOOL True if message has been printed
 * @PublicAPI: true
 */
#include "script_component.hpp"

#define DEFAULT_LOGGING_LEVEL -1
#define DEFAULT_TEXT_DISPLAY -1

private ["_msg", "_level", "_prefix", "_defaultLoglevel","_defaultLogDisplayLevel", "_message", "_from"];
_msg = _this select 0;
_level = if (count _this > 1) then {_this select 1} else { 2 };

if (typeName _level != "NUMBER") then {
    _level = 2;
};

_defaultLoglevel = if (isNil QGVAR(LOGLEVEL)) then {
    DEFAULT_LOGGING_LEVEL;
} else {
    GVAR(LOGLEVEL);
};

if (_defaultLoglevel < 0) exitwith {
    false
};

_defaultLogDisplayLevel = if (isnil QGVAR(LOGDISPLAY_LEVEL)) then {
    DEFAULT_TEXT_DISPLAY;
} else {
    GVAR(LOGDISPLAY_LEVEL);
};

if (_level <= _defaultLoglevel) then {

    _prefix = switch (_level) do {
        case 0: { "ACE Error" };
        case 1: { "ACE Warn" };
        case 2: { "ACE Debug" };
        case 3: { "ACE Info" };
        default { "ACE Unknown" };
    };
    _message = format["[%1] %2",_prefix,_msg];

    if (_level <= _defaultLogDisplayLevel) then {
        systemChat _message;
    };
    diag_log _message;

    // pass it onwards to the log function:
    // [0, [], compile format["%1",_msg], true] call FUNC(log);
};
true