#include "..\script_component.hpp"

params [["_logic", objNull, [objNull]], ["_units", [], [[]]], ["_activated", true, [true]]];

if !(_activated) exitWith {};

private _taskID = _logic getVariable ["TaskID", ""];
private _limitFail = _logic getVariable ["LimitFail", -1];
private _limitSuccess = _logic getVariable ["LimitSuccess", -1];
private _companyFunds = _logic getVariable ["CompanyFunds", 0];
private _ratingFail = _logic getVariable ["RatingFail", 0];
private _ratingSuccess = _logic getVariable ["RatingSuccess", 0];
private _endSuccess = _logic getVariable ["EndSuccess", false];
private _endFail = _logic getVariable ["EndFail", false];
private _timeLimit = _logic getVariable ["TimeLimit", 0];

diag_log format ["[FORGE] Defuse Module Parameters: TaskID: %1, LimitFail: %2, LimitSuccess: %3, Funds: %4, RatingFail: %5, RatingSuccess: %6, EndSuccess: %7, EndFail: %8, Time: %9", _taskID, _limitFail, _limitSuccess, _companyFunds, _ratingFail, _ratingSuccess, _endSuccess, _endFail, _timeLimit];

private _syncedModules = synchronizedObjects _logic;
diag_log format ["[FORGE] Defuse Module Synced Modules: %1", _syncedModules];

private _iedModule = (_syncedModules select { typeOf _x == "FORGE_Module_Explosives" }) select 0;
private _protectedModule = (_syncedModules select { typeOf _x == "FORGE_Module_Protected" }) select 0;

private _explosiveEntities = synchronizedObjects _iedModule;
diag_log format ["[FORGE] Defuse Module Explosive Entites: %1", _explosiveEntities];

private _protectedEntities = synchronizedObjects _protectedModule;
diag_log format ["[FORGE] Defuse Module Protected Entities: %1", _protectedEntities];

{
    if (!isNull _x) then {
        [_x, _taskID, _timeLimit] spawn FUNC(makeIED);
    };
} forEach _explosiveEntities;

{
    if (!isNull _x) then {
        [_x, _taskID] spawn FUNC(makeObject);
    };
} forEach _protectedEntities;

[_taskID, _limitFail, _limitSuccess, _companyFunds, _ratingFail, _ratingSuccess, _endSuccess, _endFail] spawn FUNC(defuse);

deleteVehicle _logic;