#pragma once

// Custom Classes
#include "CDTable.h"

/*!
 \file CDDestructibleComponentTable.hpp
 \brief Contains data for the DestructibleComponent table
 */

//! ItemComponent Struct
struct CDDestructibleComponent {
    unsigned int id;                            //!< The component ID from the ComponentsRegistry Table
    int faction;                       //!< The Faction ID of the object
    std::string factionList;               //!< A list of the faction IDs
    int life;                          //!< The amount of life of the object
    unsigned int imagination;                   //!< The amount of imagination of the object
    int LootMatrixIndex;               //!< The Loot Matrix Index
    int CurrencyIndex;                 //!< The Currency Index
    unsigned int level;                         //!< ???
    float armor;                        //!< The amount of armor of the object
    unsigned int death_behavior;                //!< The behavior ID of the death behavior
    bool isnpc;                         //!< Whether or not the object is an NPC
    unsigned int attack_priority;               //!< ???
    bool isSmashable;                   //!< Whether or not the object is smashable
    int difficultyLevel;               //!< ???
};

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