#pragma once

// Custom Classes
#include "CDTable.h"

/*!
 \file CDItemSetsTable.hpp
 \brief Contains data for the ItemSets table
 */

//! ZoneTable Struct
struct CDItemSets {
    unsigned int setID;             //!< The item set ID
    unsigned int locStatus;         //!< The loc status
    std::string itemIDs;       //!< THe item IDs
    unsigned int kitType;           //!< The item kit type
    unsigned int kitRank;           //!< The item kit rank
    unsigned int kitImage;          //!< The item kit image
    unsigned int skillSetWith2;     //!< The skill set with 2
    unsigned int skillSetWith3;     //!< The skill set with 3
    unsigned int skillSetWith4;     //!< The skill set with 4
    unsigned int skillSetWith5;     //!< The skill set with 5
    unsigned int skillSetWith6;     //!< The skill set with 6
    bool localize;          //!< Whether or localize
    std::string gate_version;  //!< The gate version
    unsigned int kitID;             //!< The kit ID
    float priority;         //!< The priority
};

//! ItemSets table
class CDItemSetsTable : public CDTable {
private:
    std::vector<CDItemSets> entries;
    
public:
    
    //! Constructor
    CDItemSetsTable(void);
    
    //! Destructor
    ~CDItemSetsTable(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<CDItemSets> Query(std::function<bool(CDItemSets)> predicate);
    
    //! Gets all the entries in the table
    /*!
      \return The entries
     */
    std::vector<CDItemSets> GetEntries(void) const;
    
};