/*
	Garden Manager
	by Aaron Clark - EpochMod.com

	Improvements and or bugfixes and other contributions are welcome via the github:
	https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/GardenManager.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_babies","_babyClasses","_cargo","_garden","_mature","_matureClasses","_modifiedGardens","_seedClasses","_seeds","_spoil","_teenClasses","_teens"];
//[[[end]]]

_seedClasses = ["SeedPacket_GoldenSeal","SeedPacket_Hemp","SeedPacket_Poppy","SeedPacket_Pumpkin","SeedPacket_Sunflower"];
_babyClasses = ["Sapling_GoldenSeal","Sapling_Hemp","Sapling_Poppy","Sapling_Pumpkin","Sapling_Sunflower"];
_teenClasses = ["SaplingTeen_GoldenSeal","SaplingTeen_Hemp","SaplingTeen_Poppy","SaplingTeen_Pumpkin","SaplingTeen_Sunflower"];
_matureClasses = ["Goldenseal","Hemp","Poppy","Pumpkin","Sunflower"];
_spoil = false;

// init var if not set
if (isNil "EPOCH_activeGardens") then {EPOCH_activeGardens = []};
// remove any null objects
EPOCH_activeGardens = EPOCH_activeGardens - [objNull];

_modifiedGardens = [];
{
	_garden = _x;
	_cargo = magazineCargo _x;
	// find all seeds
	_seeds = _cargo select {_x in _seedClasses};
	// find all baby plants
	_babies = _cargo select {_x in _babyClasses};
	// find all teen plants
	_teens = _cargo select {_x in _teenClasses};
	// find all mature plants
	_mature = _cargo select {_x in _matureClasses};

	// normalize storage
	clearWeaponCargoGlobal _x;
	clearMagazineCargoGlobal _x;
	clearBackpackCargoGlobal _x;
	clearItemCargoGlobal _x;

	// convert seeds to baby plants.
	{
		_garden addMagazineCargoGlobal [(_babyClasses param [_seedClasses find _x, _x]), 1];
	} forEach _seeds;

	// convert baby plants to teen
	{
		_garden addMagazineCargoGlobal [(_teenClasses param [_babyClasses find _x, _x]), 1];
	} forEach _babies;

	// convert teen plants to mature
	{
		_garden addMagazineCargoGlobal [(_matureClasses param [_teenClasses find _x, _x]), 1];
	} forEach _teens;

	// readd mature plants if spoil == false
	if !(_spoil) then {
		{
			_garden addMagazineCargoGlobal [_x, 1];
		} forEach _mature;
	};

	// push to temp array for save
	if !((magazineCargo _garden) isEqualTo _cargo) then {
		_modifiedGardens pushBack _garden;
	};

} forEach EPOCH_activeGardens;

// force all modified gardens to save via queue
if !(_modifiedGardens isEqualTo []) then {
	[_modifiedGardens] call EPOCH_server_save_vehicles;
};