// by commy2
#include "script_component.hpp"

private ["_config"];

ACE_isMapEnabled     = call {_config = missionConfigFile >> "showMap";     !isNumber _config || {getNumber _config == 1}};  // default value is 1, so do isNumber check first
ACE_isCompassEnabled = call {_config = missionConfigFile >> "showCompass"; !isNumber _config || {getNumber _config == 1}};
ACE_isWatchEnabled   = call {_config = missionConfigFile >> "showWatch";   !isNumber _config || {getNumber _config == 1}};
ACE_isRadioEnabled   = call {_config = missionConfigFile >> "showRadio";   !isNumber _config || {getNumber _config == 1}};
ACE_isGPSEnabled     = call {_config = missionConfigFile >> "showGPS";     !isNumber _config || {getNumber _config == 1}};

GVAR(AssignedItems) = [];
GVAR(AssignedItemsInfo) = [];

["playerInventoryChanged", {
    private ["_unit", "_assignedItems", "_shownItems"];

    _unit = _this select 0;
    _assignedItems = _this select 1 select 17;

    _shownItems = [
        ACE_isMapEnabled,
        ACE_isCompassEnabled,
        ACE_isWatchEnabled,
        ACE_isRadioEnabled,
        ACE_isGPSEnabled
    ];

    {
        if !(_x in GVAR(AssignedItems)) then {
            GVAR(AssignedItems) pushBack _x;
            GVAR(AssignedItemsInfo) pushBack toLower getText (configFile >> "CfgWeapons" >> _x >> "ACE_hideItemType")
        };

        private "_hideItemType";
        _hideItemType = GVAR(AssignedItemsInfo) select (GVAR(AssignedItems) find _x);

        switch (_hideItemType) do {
            case ("map"): {
                _shownItems set [0, false];
            };
            case ("compass"): {
                _shownItems set [1, false];
            };
            case ("watch"): {
                _shownItems set [2, false];
            };
            case ("radio"): {
                _shownItems set [3, false];
            };
            case ("gps"): {
                _shownItems set [4, false];
            };
        };
    } forEach _assignedItems;

    //systemChat str _shownItems;

    showMap     (_shownItems select 0);
    showCompass (_shownItems select 1);
    showWatch   (_shownItems select 2);
    showRadio   (_shownItems select 3);
    showGPS     (_shownItems select 4 || {cameraOn == getConnectedUAV _unit});  //If player is activly controling a UAV, showGPS controls showing the map (m key)
}] call FUNC(addEventHandler);