#ifndef PICKAXE_HPP_
#define PICKAXE_HPP_

#include <Item/StatefulItem/BasicTool/BasicTool.hpp>

/**
 * @brief Represents a pickaxe with some given properties.
 */
class Pickaxe : public BasicTool
{
private:
    const float m_power;
    const std::string m_displayName;
    const bool isStone;

    bool isEffectiveAgainst(Block &block);

public:
    Pickaxe(std::string name, Material &mat, int numUses, float power, std::string displayName, bool isStone = false);

    virtual bool canDig(ItemStack &stack, Block &block) override;
    virtual float getPowerAgainst(ItemStack &stack, Block &block) override;
    virtual std::string getDisplayName(const ItemStack &stack) override;
    virtual void harvest(ItemStack &stack, LocalWorld &world, glm::ivec3 pos) override;
    virtual void getExtraToolTipLines(const ItemStack &stack, ToolTip &tip) override;
    virtual Sound& getDigSoundFor(ItemStack &stack, Block &block) override;
};

#endif