#include "script_component.hpp"

// Exit on Headless
if (!hasInterface) exitWith {};

["ace_settingsInitialized", {
    // Initial settings
    [false] call FUNC(setElements);

    // On load and entering/exiting a vehicle
    ["ace_infoDisplayChanged", {
        // Selective UI Advanced
        // Defaults must be set in this EH to make sure controls are activated and advanced settings can be modified
        private _force = [true, false] select (GVAR(allowSelectiveUI));
        {
            private _name = configName _x;
            [_name, missionNamespace getVariable (format [QGVAR(%1), _name]), false, _force] call FUNC(setAdvancedElement);
        } forEach ("true" configClasses (configFile >> "ACE_UI"));

        // Execute local event for when it's safe to modify UI through this API
        // infoDisplayChanged can execute multiple times, make sure it only happens once
        if (!GVAR(interfaceInitialized)) then {
            [QGVAR(InterfaceInitialized), []] call CBA_fnc_localEvent;
            GVAR(interfaceInitialized) = true;
        };
    }] call CBA_fnc_addEventHandler;

    // On changing settings
    ["ace_settingChanged", {
        params ["_name"];

        if (_name in ELEMENTS_BASIC) then {
            [true] call FUNC(setElements);
        } else {
            if (isClass (configFile >> "ACE_UI" >> _name select [7])) then {
                [_name select [7], missionNamespace getVariable _name, true] call FUNC(setAdvancedElement);
            };
        };
    }] call CBA_fnc_addEventHandler;

}] call CBA_fnc_addEventHandler;