// by commy2
/*
    usage:

    (configFile >> "CfgAmmo") call FUNC(exportConfig);
*/
#include "script_component.hpp"

private "_fnc_logEntries";

_fnc_logEntries = {
    private ["_p", "_t", "_e", "_a", "_i"];

    PARAMS_2(_c,_d);

    _p = inheritsFrom _c;

    _t = format [["class %1: %2 {", "class %1 {"] select (configName _p == ""), configName _c, configName _p];
    for "_a" from 1 to _d do {
        _t = "  " + _t;
    };
    diag_log text _t;

    _e = [];
    for "_i" from 0 to (count _c - 1) do {
        private ["_e1, _e2"];
        _e1 = _c select _i;

        _e2 = switch (true) do {
            case (isNumber _e1): {getNumber _e1};
            case (isText _e1): {getText _e1};
            case (isArray _e1): {getArray _e1};
            case (isClass _e1): {[_e1, _d + 1] call _fnc_logEntries; false};
        };

        if (typeName _e2 != "BOOL") then {
            if (typeName _e2 == "ARRAY") then {
                _e2 = toArray str _e2;
                {
                    if (_x == toArray "[" select 0) then {
                        _e2 set [_forEachIndex, toArray "{" select 0];
                    };
                    if (_x == toArray "]" select 0) then {
                        _e2 set [_forEachIndex, toArray "}" select 0];
                    };
                } forEach _e2;
                _e2 = toString _e2;
                _t = format ["%1[] = %2;", configName _e1, _e2];
            } else {
                _t = format ["%1 = %2;", configName _e1, str _e2];
            };
            for "_a" from 0 to _d do {
                _t = "  " + _t;
            };
            diag_log text _t;
        };
    };

    _t = "};";
    for "_a" from 1 to _d do {
        _t = "  " + _t;
    };
    diag_log text _t;
    diag_log text "";
};

[_this, 0] call _fnc_logEntries;