#pragma once

// Custom Classes
#include "CDTable.h"
#include "dCommonVars.h"

struct CDItemComponent {
	unsigned int id;                        //!< The Component ID
	std::string equipLocation;         //!< The equip location
	unsigned int baseValue;                 //!< The monetary base value of the item
	bool isKitPiece;                //!< Whether or not the item belongs to a kit
	unsigned int rarity;                    //!< The rarity of the item
	unsigned int itemType;                  //!< The item type
	int64_t itemInfo;                  //!< The item info
	bool inLootTable;               //!< Whether or not the item is in a loot table
	bool inVendor;                  //!< Whether or not the item is in a vendor inventory
	bool isUnique;                  //!< ???
	bool isBOP;                     //!< ???
	bool isBOE;                     //!< ???
	unsigned int reqFlagID;                 //!< User must have completed this flag to get the item
	unsigned int reqSpecialtyID;            //!< ???
	unsigned int reqSpecRank;               //!< ???
	unsigned int reqAchievementID;          //!< The required achievement must be completed
	unsigned int stackSize;                 //!< The stack size of the item
	unsigned int color1;                    //!< Something to do with item color...
	unsigned int decal;                     //!< The decal of the item
	unsigned int offsetGroupID;             //!< Something to do with group IDs
	unsigned int buildTypes;                //!< Something to do with building
	std::string reqPrecondition;       //!< The required precondition
	unsigned int animationFlag;             //!< The Animation Flag
	unsigned int equipEffects;              //!< The effect played when the item is equipped
	bool readyForQA;                //!< ???
	unsigned int itemRating;                //!< ???
	bool isTwoHanded;               //!< Whether or not the item is double handed
	unsigned int minNumRequired;            //!< Maybe the minimum number required for a mission, or to own this object?
	unsigned int delResIndex;               //!< ???
	unsigned int currencyLOT;               //!< ???
	unsigned int altCurrencyCost;           //!< ???
	std::string subItems;              //!< A comma seperate string of sub items (maybe for multi-itemed things like faction test gear set)
	UNUSED(std::string audioEventUse);         //!< ???
	bool noEquipAnimation;          //!< Whether or not there is an equip animation
	unsigned int commendationLOT;           //!< The commendation LOT
	unsigned int commendationCost;          //!< The commendation cost
	UNUSED(std::string audioEquipMetaEventSet);    //!< ???
	std::string currencyCosts;         //!< Used for crafting
	UNUSED(std::string ingredientInfo);        //!< Unused
	unsigned int locStatus;                 //!< ???
	unsigned int forgeType;                 //!< Forge Type
	float SellMultiplier;           //!< Something to do with early vendors perhaps (but replaced)
};

class CDItemComponentTable : public CDTable<CDItemComponentTable> {
private:
	std::map<unsigned int, CDItemComponent> entries;

public:
	CDItemComponentTable();
	static std::map<LOT, uint32_t> ParseCraftingCurrencies(const CDItemComponent& itemComponent);

	// Gets an entry by ID
	const CDItemComponent& GetItemComponentByID(unsigned int skillID);

	static CDItemComponent Default;
};