#pragma once

// Custom Classes
#include "CDTable.h"

/*!
 \file CDLootMatrixTable.hpp
 \brief Contains data for the ObjectSkills table
 */

 //! LootMatrix Struct
struct CDLootMatrix {
	unsigned int LootMatrixIndex;           //!< The Loot Matrix Index
	unsigned int LootTableIndex;            //!< The Loot Table Index
	unsigned int RarityTableIndex;          //!< The Rarity Table Index
	float percent;                   //!< The percent that this matrix is used?
	unsigned int minToDrop;                 //!< The minimum amount of loot from this matrix to drop
	unsigned int maxToDrop;                 //!< The maximum amount of loot from this matrix to drop
	unsigned int id;                        //!< The ID of the Loot Matrix
	unsigned int flagID;                    //!< ???
	UNUSED(std::string gate_version);          //!< The Gate Version
};

//! MissionNPCComponent table
class CDLootMatrixTable : public CDTable {
private:
	std::vector<CDLootMatrix> entries;

public:

	//! Constructor
	CDLootMatrixTable(void);

	//! Destructor
	~CDLootMatrixTable(void);

	//! Returns the table's name
	/*!
	 \return The table name
	 */
	std::string GetName(void) const override;

	//! Queries the table with a custom "where" clause
	/*!
	 \param predicate The predicate
	 */
	std::vector<CDLootMatrix> Query(std::function<bool(CDLootMatrix)> predicate);

	//! Gets all the entries in the table
	/*!
	  \return The entries
	 */
	const std::vector<CDLootMatrix>& GetEntries(void) const;

};