// #define ENABLE_PERFORMANCE_COUNTERS
#include "script_component.hpp"
// BEGIN_COUNTER(blueForceTrackingUpdate);

private ["_groupsToDrawMarkers", "_playersToDrawMarkers", "_playerSide", "_anyPlayers", "_colour", "_marker"];

// Delete last set of markers (always)
{
    deleteMarkerLocal _x;
} forEach GVAR(BFT_markers);

GVAR(BFT_markers) = [];

if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then {

    _groupsToDrawMarkers = [];
    _playerSide = call EFUNC(common,playerSide);

    _groupsToDrawMarkers = allGroups select {side _x == _playerSide};

    if (GVAR(BFT_HideAiGroups)) then {
        _groupsToDrawMarkers = _groupsToDrawMarkers select {
            {
                _x call EFUNC(common,isPlayer);
            } count units _x > 0;
        };
    };

    if (GVAR(BFT_ShowPlayerNames)) then {
        _playersToDrawMarkers = allPlayers select {side _x == _playerSide};

        {
            private _markerType = [_x] call EFUNC(common,getMarkerType);
            private _colour = format ["Color%1", side _x];

            private _marker = createMarkerLocal [format ["ACE_BFT_%1", _forEachIndex], [(getPos _x) select 0, (getPos _x) select 1]];
            _marker setMarkerTypeLocal _markerType;
            _marker setMarkerColorLocal _colour;
            _marker setMarkerTextLocal (name _x);

            GVAR(BFT_markers) pushBack _marker;
        } forEach _playersToDrawMarkers;

        _groupsToDrawMarkers = _groupsToDrawMarkers select {
            {
                !(_x call EFUNC(common,isPlayer));
            } count units _x > 0;
        };
    };

    {
        private _markerType = [_x] call EFUNC(common,getMarkerType);
        private _colour = format ["Color%1", side _x];

        private _marker = createMarkerLocal [format ["ACE_BFT_%1", _forEachIndex], [(getPos leader _x) select 0, (getPos leader _x) select 1]];
        _marker setMarkerTypeLocal _markerType;
        _marker setMarkerColorLocal _colour;
        _marker setMarkerTextLocal (groupId _x);

        GVAR(BFT_markers) pushBack _marker;
    } forEach _groupsToDrawMarkers;
};

// END_COUNTER(blueForceTrackingUpdate);