/*
	Author: Aaron Clark - EpochMod.com

    Contributors: He-Man

	Description:
	NPC trade code

    Licence:
    Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike

    Github:
    https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/traders/EPOCH_startNpcTrade.sqf

    Example:
    cursorTarget call EPOCH_startNpcTrade;

    Parameter(s):
		_this: OBJECT

	Returns:
	NOTHING
*/
//[[[cog import generate_private_arrays ]]]
private ["_addWeaponToHands","_arrayIn","_arrayOut","_config","_current_crypto","_errorMsg","_item","_itemTax","_itemWorth","_sizeOut","_tax","_type","_vehSlot","_vehicle","_vehicles"];
//[[[end]]]

if (!isNil "EPOCH_TRADE_STARTED") exitWith{};
if (isNull _this) exitWith{};

if (alive _this) then {

	_config = 'CfgPricing' call EPOCH_returnConfig;

	_current_crypto = EPOCH_playerCrypto;

	// _arrayIn = Sell Array
	_sizeOut = lbSize 41501;
	_arrayIn = [];
	if (_sizeOut > 0) then {
		for "_i" from 0 to(_sizeOut - 1) do {
			_item = lbData[41501, _i];

			if (isClass (_config >> _item)) then{

				// test remove items to be sold and add to array
				if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
					if (_item in items player) then {
						player removeItem _item;
						_arrayIn pushBack _item;
					} else {
						if (_item == primaryweapon player) then {
							player removeweapon _item;
							_arrayIn pushBack _item;
						};
					};
				} else {
					if ([_item, "CfgVehicles"] call EPOCH_fnc_isAny) then {
						if (_item == backpack player) then {
							removeBackpack player;
							_arrayIn pushBack _item;
						} else {
							_vehicles = _this nearEntities[[_item], 30];
							if (!(_vehicles isEqualTo[])) then {
								_vehicle = _vehicles select 0;
								if (!isNull _vehicle) then {
									if (local _vehicle) then {
										_vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"];
										if (_vehSlot != "ABORT") then {
											_arrayIn pushBack _item;
											// will be removed server side
										};
									};
								};
							};
						};
					} else {
						if (_item in magazines player) then {
							player removeMagazine _item;
							_arrayIn pushBack _item;
						};
					};
				};
				// test



			};
		};
	};

	// _arrayOut = Purchase Array
	_sizeOut = lbSize 41502;
	_arrayOut = [];
	if (_sizeOut > 0) then {
		for "_i" from 0 to(_sizeOut - 1) do {
			_item = lbData[41502, _i];

			if (isClass (_config >> _item)) then{
				_itemWorth = getNumber(_config >> "price");
				_itemTax = getNumber(_config >> "tax");
				_tax = _itemWorth * (EPOCH_taxRate + _itemTax);
				_itemWorth = ceil(_itemWorth + _tax);

				if (_current_crypto >= _itemWorth) then {
					_current_crypto = _current_crypto - _itemWorth;
					_arrayOut pushBack _item;
				};
			};
		};
	};

	if (!(_arrayIn isEqualTo[]) || !(_arrayOut isEqualTo[])) then {
		EPOCH_TRADE_STARTED = true;

		// make trade
		[_this, _arrayIn, _arrayOut, player, Epoch_personalToken] remoteExec ["EPOCH_server_makeNPCTrade",2];

		// close menu
		closeDialog 0;
	};
};