#include "..\script_component.hpp"

/*
 * Function: forge_client_org_fnc_addAsset
 * Author: J. Schmidt
 * 
 * Description:
 * Adds an asset to an organization's inventory
 *
 * Arguments:
 * 0: _uid - Player UID <STRING>
 * 1: _name - Organization name <STRING>
 * 2: _assetType - Type of asset (vehicle, building, etc.) <STRING>
 * 3: _assetData - Asset data <HASHMAP>
 *
 * Return Value:
 * Updated assets collection <HASHMAP>
 */

params [["_uid", "", [""]], ["_name", "", [""]], ["_assetType", "", [""]], ["_assetData", createHashMap, [createHashMap]]];

if (_uid == "" || _name == "" || _assetType == "") exitWith { TRACE_3("Invalid parameters for adding asset",_uid,_name,_assetType); nil };

private _store = call FUNC(verifyOrgStore);
private _key = format ["%1_%2", _uid, _name];
private _org = _store call ["getByKey", [_key]];

private _timestamp = systemTimeUTC apply { if (_x < 10) then { "0" + str _x } else { str _x }};
private _dateTime = format ["%1-%2-%3_%4:%5:%6.%7", _timestamp#0, _timestamp#1, _timestamp#2, _timestamp#3, _timestamp#4, _timestamp#5, _timestamp#6];

if (isNil "_org") exitWith { TRACE_1("Organization not found",_key); nil };

private _assets = _org get "assets";
private _logs = _org get "logs";
private _owner = _org get "owner";

if (isNil { _assets get _assetType }) then { _assets set [_assetType, []]; };

private _typeAssets = _assets get _assetType;

_typeAssets pushBack _assetData;
_org set ["assets", _assets];

_logs pushBack [_dateTime, "ASSET_ADDED", _assetType, _assetData];
_org set ["logs", _logs];

_store call ["post", [_owner, _name]];

_assets