#include "Item.h"
#include "../Utils.h"
#include <Utils/StringTokenizer.h>

namespace assets
{
	std::map<std::string, Item*> Item::list;

	void Item::load(gge::resource::DataArray &dataArray)
	{

		int index = 0;
		ID      = dataArray.getString(index++);
		type    = Type(dataArray.getInt(index++));
		slot    = Slot(dataArray.getInt(index++));
		artisan = dataArray.getString(index++);

		// get all building names into buffer
		std::string buffer = dataArray.getString(index++);

		if(buffer!="") {
			// split required building names 
			gge::utils::StringTokenizer st(buffer, ",");
			for(; st.IsValid(); st.Next())
			{
				// trim white spaces before pushing into vector
				requiredBuilding.push_back(trimLeft(trimRight(*st)));
			}
		}

		cost					  = dataArray.getFloat(index++);
		XPReward				  = dataArray.getFloat(index++);
		craftTime				  = dataArray.getFloat(index++);
		craftTimeSpeModifier	  = dataArray.getFloat(index++);
		craftTimeLvlModifier	  = dataArray.getFloat(index++);
		staminaCost				  = dataArray.getFloat(index++);
		damage					  = dataArray.getFloat(index++);
		damageStrModifier		  = dataArray.getFloat(index++);
		damageDexModifier		  = dataArray.getFloat(index++);
		damageLvlModifier		  = dataArray.getFloat(index++);
		range					  = dataArray.getFloat(index++);
		rangeStrModifier		  = dataArray.getFloat(index++);
		CD						  = dataArray.getFloat(index++);
		CDSpeModifier			  = dataArray.getFloat(index++);
		CDLvlModifier			  = dataArray.getFloat(index++);
		precision				  = dataArray.getFloat(index++);
		precisionAccModifier	  = dataArray.getFloat(index++);
		precisionLvlModifier	  = dataArray.getFloat(index++);
		parry					  = dataArray.getFloat(index++);
		parryAccModifier		  = dataArray.getFloat(index++);
		parryIntlModifier		  = dataArray.getFloat(index++);
		parryLvlModifier		  = dataArray.getFloat(index++);
		block				      = dataArray.getFloat(index++);
		blockAccModifier		  = dataArray.getFloat(index++);
		blockLvlModifier		  = dataArray.getFloat(index++);
		armorPierce				  = dataArray.getFloat(index++);
		armorPierceAccModifier    = dataArray.getFloat(index++);
		armorPierceLvlModifier    = dataArray.getFloat(index++);
		crit					  = dataArray.getFloat(index++);
		critAccModifier			  = dataArray.getFloat(index++);
		critLvlModifier			  = dataArray.getFloat(index++);
		armor					  = dataArray.getFloat(index++);
		accModifier				  = dataArray.getFloat(index++);
		speModifier				  = dataArray.getFloat(index++);
		CDModifier				  = dataArray.getFloat(index++);
		movementSpeed			  = dataArray.getFloat(index++);
		movementSpeedStrModifier  = dataArray.getFloat(index++);
		stagger				      = dataArray.getFloat(index++);
		staggerStrModifier		  = dataArray.getFloat(index++);
		staggerLvlModifier		  = dataArray.getFloat(index++);
		staggerReduction		  = dataArray.getFloat(index++);
		overshootRange			  = dataArray.getFloat(index++);
		overshootRangeStrModifier = dataArray.getFloat(index++);
		overshootRangeLvlModifier = dataArray.getFloat(index++);
		minOvershootRange		  = dataArray.getFloat(index++);
		arrowSpeed				  = dataArray.getFloat(index++);
		arrowSpeedStrModifier	  = dataArray.getFloat(index++);
		arrowSpeedCap			  = dataArray.getFloat(index++);
		staminaDrain			  = dataArray.getFloat(index++);
		sight					  = dataArray.getFloat(index++);
	}
}
