#include "\a3\ui_f\hpp\defineDIKCodes.inc"

["ACE3 Equipment", QGVAR(openCellphone), LLSTRING(cellphone_displayName), {
    if (
        !([ACE_player, "ACE_Cellphone"] call EFUNC(common,hasItem)) ||
        !([ACE_player, objNull, ["isNotSwimming", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith))
    ) exitWith {};

    closeDialog 0;
    createDialog "Rsc_ACE_PhoneInterface";

    true
}] call CBA_fnc_addKeybind; // Unbound

["ACE3 Equipment", QGVAR(detonateActiveClacker), LLSTRING(DetonateAllOnActive), {
    // Prevent use of keybind while surrendering or captive
    if !([ACE_player, objNull, ["isNotSwimming", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {};

    private _detonator = GVAR(activeTrigger);
    if (_detonator == "" || !(_detonator in ([ACE_player] call FUNC(getDetonators)))) exitWith {};

    // When using a Dead Man's Switch, skip all other logic and just call fnc_onIncapacitated, since it already handles everything that is required to detonate all connected explosives
    if (_detonator == "ACE_DeadManSwitch") exitWith {
        [ACE_player] call FUNC(onIncapacitated);
    };

    private _range = getNumber (configFile >> "CfgWeapons" >> _detonator >> QGVAR(Range));

    private _explosivesList = [];
    {
        if (!isNull (_x select 0)) then {
            private _required = getArray (configFile >> "ACE_Triggers" >> _x select 4 >> "requires");
            if (_detonator in _required) then {
                _explosivesList pushBack _x;
            };
        };
    } forEach ([ACE_player] call FUNC(getPlacedExplosives));

    [ACE_player, _range, _explosivesList, _detonator] call FUNC(detonateExplosiveAll);

    true
}] call CBA_fnc_addKeybind; // Unbound

["ACE3 Equipment", QGVAR(cycleActiveClacker), LLSTRING(CycleActiveTrigger), {
    if !([ACE_player, objNull, ["isNotSwimming", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {};

    [ACE_player] call FUNC(cycleActiveTrigger);

    true
}] call CBA_fnc_addKeybind; // Unbound