#include "..\script_component.hpp"
#include "..\defines.hpp"
/*
 * Author: Brett Mayson
 * Create the internal actions arrays when needed for the first time.
 *
 * Arguments:
 * None
 *
 * Return Value:
 * None
 *
 * Public: No
*/

if (!isNil QGVAR(actionList)) exitWith {};

private _actionList = [
    [], // Primary 0
    [], // Handgun 1
    [], // Launcher 2
    [], // Uniform 3
    [], // Vests 4
    [], // Backpacks 5
    [], // Headgear 6
    [], // Goggles 7
    [], // NVGs 8
    [], // Binoculars 9
    [], // Map 10
    [], // GPS 11
    [], // Radio 12
    [], // Compass 13
    [], // Watch 14
    [], // Face 15
    [], // Voice 16
    []  // Insignia 17
];

private _configGroupEntries = "true" configClasses (configFile >> QGVAR(actions));

GVAR(updateActionsOnCargoChange) = false;

{
    private _scopeEditor = getNumber (_x >> "scopeEditor");

    if (is3DEN && {_scopeEditor != 2}) then {continue};

    private _configActions = "true" configClasses _x;

    private _rootClass = configName _x;
    private _rootDisplayName = getText (_x >> "displayName");
    private _rootCondition = getText (_x >> "condition");
    private _rootTabs = getArray (_x >> "tabs");
    private _updateOnCargoChanged = getNumber (_x >> "updateOnCargoChanged");
    if (_updateOnCargoChanged > 0) then {
        GVAR(updateActionsOnCargoChange) = true;
    };

    if (_rootCondition != "") then {
        _rootCondition = compile _rootCondition;
    } else {
        _rootCondition = {true};
    };

    private _group = [];

    {
        private _class = configName _x;
        private _label = getText (_x >> "label");
        private _condition = getText (_x >> "condition");
        private _statement = getText (_x >> "statement");
        private _text = getText (_x >> "text");
        private _textStatement = getText (_x >> "textStatement");

        private _type = switch (false) do {
            case (_text == ""): {
                _statement = format ["""%1""", _text];
                ACTION_TYPE_TEXT
            };
            case (_textStatement == ""): {
                _statement = _textStatement;
                ACTION_TYPE_TEXT
            };
            case (_statement == ""): {
                _statement = _statement;
                ACTION_TYPE_BUTTON
            };
            default {
                -1
            };
        };

        if (_type == -1) then {
            continue;
        };

        _statement = compile format [QUOTE([GVAR(center)] call {%1}), _statement];

        if (_condition != "") then {
            _condition = compile _condition;
        } else {
            _condition = {true};
        };

        // No duplicates are possible here
        _group pushBack [_class, _type, _label, _statement, _condition];
    } forEach _configActions;

    {
        (_actionList select _x) pushBack [_rootClass, _rootDisplayName, _rootCondition, _group];
    } forEach _rootTabs;
} forEach _configGroupEntries;

GVAR(actionList) = _actionList;